어노테이션 기반 기본 설정
어노테이션 기반 설정
<context:component-scan base-package="…"/>
-
xml 파일에 직접 빈 등록 설정을 하지 않고, 자동으로 설정되게하는 엘리먼트이다.
-
이 설정을 통해 스프링 컨테이너는 지정한 클래스 패스에 있는 클래스들 중 @Component 어노테이션이 붙은 클래스들을 스캔하고 빈으로 등록한다.
빈 등록을 위한 어노테이션
@Component("…")
-
빈으로 등록하기위해 클래스 선언부 위에 설정하는 어노테이션이다.
-
당연히 클래스의 기본 생성자가 있어야만 컨테이너가 빈으로 등록할 수 있다.
-
또한, 컨테이너가 생성한 객체를 사용하기 위해서는 id나 name과 같은 이름을 설정해주어야 한다. 설정하지 않은 경우에는 자동으로 클래스명에서 앞글자를 소문자로 바꾼 이름으로 등록된다.
-
@Controller | @Service | @Repository 어노테이션들은 @Component를 상속한 것으로, 각각 MVC 역할을 수행하는 클래스임을 분류하고 인식되도록 하는 어노테이션들이다.
의존성 주입을 위한 어노테이션
@Autowired
-
스프링에서 제공하는 어노테이션이다.
-
객체의 타입을 이용하여, 등록된 빈들 중 일치하는 것을 찾아 주입하는 어노테이션이다. 주입하기위해서는 빈으로 등록된 객체이어야 한다.
-
등록된 빈이 없거나 같은 타입으로 등록된 빈이 2개 이상이면, NoSuchBeanDefinitionException이 발생한다. 이를 방지하기 위해 required 속성을 false로 주거나 @Qualifier 어노테이션을 사용하면 된다.
-
여기서 같은 타입의 빈이 여러개일 때 @Qualifier가 없이도 주입을 할 수 있다. 빈 이름을 변수명으로 사용하는 경우이다.
-
다시 한번 정리해보면, 다음과 같다.
-
객체 타입의 빈이 없다 -> ERROR
-
객체 타입의 빈이 유일하다 -> OK
-
객체 타입의 빈이 여러개다
-
객체 이름과 같은 빈이 있다. -> OK
-
객체 이음과 같은 빈이 없다 -> ERROR
-
-
@Qualifier
-
스프링에서 제공하는 어노테이션이다.
-
객체의 이름을 이용하여, 등록된 빈들 중 일치하는 것을 찾아 주입하는 어노테이션이다.
@Inject
-
자바에서 제공하는 어노테이션이다.
-
객체의 타입을 통해 주입하는 어노테이션으로 @Autowired와 유사하다.
@Resource
-
스프링에서 제공하지 않고 자바에서 제공하는 어노테이션이다.
-
객체의 이름을 이용하여 주입하는 어노테이션으로 @Qualifier와 유사하다.
댓글
댓글 쓰기