본문 바로가기

Spring

Spring(3) - @Autowired, @Resource 사용하기

객체간 DI를 설정할 때 설정 코드를 줄이기 위해서는 객체간 의존을 자동설정해주는 @Autowired, @Resource를 이용하면 불필요한 코드들을 줄일 수 있다. 이런 애노테이션은 메서드, 생성자, 필드에 모두 사용할 수 있다.

가장먼저, <context:annotation-config/>를 선언해서 다수의 스프링 전처리기를 등록한다. 
@Autowired는 타입에맞는 빈을 자동설정 하고, @Resource는 이름에 맞는 빈을 자동설정한다.                                      

(1) @Autowired 애노테이션 적용 프로퍼티의 필수 여부 지정

스프링은 @Autuwired를 발견하면 자동으로 그에 맞는 빈을 설정한다. 하지만 그에 맞는 빈을 찾지 못한다면 다음과 같은 익셉션을 발생시킨다.

...expected at least 1 bean...(적어도 1개의 빈...)

이런 익셉션이 발생하지 않게하고 null로 유지하고 싶으면 @Autowired(required = false)로 지정하면된다.

(2) @Resource 애노테이션을 사용한 의존 자동 설정

@Resource(name = "빈 이름") 형식으로 객체 의존을 설정한다. @Autowired 애노테이션과 같이 name에 맞는 빈객체가 없을 경우 익셉션을 발생시킨다. 만약 name을 지정하지않으면 @Autowired와 동일하게 동작한다.

(3) component-scan을 통한 빈 자동설정

특정 패키지에 위치한 클래스를 스프링 빈으로 자동등록해주는 설정방식이다. 지정하는 방식은 다음과 같다.               

<context:component-scan base-package = "패키지명.*"/>

이 태그를 사용하면 @Component, @Autowired, @Required, @Resource, @Inject 같은 어노태이션들도 같이 처리해준다. @Componet 애노테이션은 용도별로 의미를 부여하는 하위 타입을 가지고 있다.

  • @Controller : 웹 MVC의 컨트롤러를 의미
  • @Service : 비즈니스로직을 처리하는 Service를 의미
  • @Repository : 주로 DB와 직접 연결하는 클래스를 의미                                                                      

쉬운듯 어려운 것 같다...