[Spring] DI 설정 - 어노테이션
DI 설정 방법
1. 설정 파일 내의 <bean></bean>으로 설정
2. 설정 파일 내에서 검색하는 방법
1) 조건 <beans ~~~~>의 xmlns 추가 (context)
xmlns:context="http://www.springframework.org/schema/context"
2) 검색 될 컴포넌트(클래스)들은 선언부 상단에 @Component 어노테이션이 있어야함
3) 설정 파일 내에서는 <component-scan>을 이용하여 검색할 수 있다.
4) 만약 검색 범위(패키지)를 설정 할 경우에는 base-package=""속성을 사용하여 설정
<context:component-scan base-package="검색패키지"></context:component-scan>
어노테이션 종류
1. @Autowired
: (스프링 제공) 주로 멤버변수 상단에 사용, 생성자나 메서드에도 사용 가능
- Spring Container는 @AutoWired을 만나는 순간 해당 변수의 데이터 타입을 확인
- Spring Container의 객체 중 해당 타입을 가진 객체를 자동 주입(<bean>으로 선언된거나 @Component된 것 중)
=> 객체가 선언 되어 있어야함~~!
- 객체 타입을 이용하여 의존성 주입 : 동일한 타입의 객체가 여러개일 경우 @Qualifier로 추가지정을 해줘야함
2. @Qualifier
: (Spring 제공)Spring Container내에 동일한 타입을 갖는 객체가 여러 개일 경우 특정 객체를 지정하여 Spring Container가 혼돈하지 않도록 설정 // 특정 객체를 설정
만약 @Qualifier("객체명") 에서 객체명을 지정하지 않으면 NoUniqueBeanDefinitionException오류 발생
3. @Inject - @Autowired랑 기능이 같음
4. @Resource
: 객체 이름을 이용하여 주입
- @Resuorce(name="객체명")과 같이 지정 가능
* @Autowired가 있는 멤버 변수의 타입과 동일한 타입을 갖는 객체가 한 개만 존재할 경우에는 @AutoWired를 사용
여러 개일 경우에는 @Resource가 편리
지정된 객체 이름이 없을 경우 : NoSuchBeanDefinitionException
어노테이션과 XML설정을 병행하여 사용
: xml -> 자바 코드를 수정하지 않아도 되서 유지보수가 편함 BUT 설정이 많아지면 xml 문서 관리가 복잡
: 어노테이션 -> xml 부담이 없고 자바 코드 해석이 편함 BUT 자바코드 수정이 필요함
1. 특정 컴포넌트에 주입되는 객체가 자주 변경 되어야 할 경우에는 <bean>태그 사용
2. 특정 컴포넌트에 주입되는 객체가 고정일 경우에는 @Component(주입되는 클래스)와 @Autowired , @Qualifier("객체명")(주입받는 클래스 내부변수) 를 이용하여 설정
* 단 ~~.jar처럼 라이브러리 형태로 제공되는 클래스는 반드시 설정 파일 내에 <bean>으로 설정
(아파치 톰캣, 스프링 프레임워크가 제공하는 클래스는 반드시 <bean>으로 지정 ex)DispatcherServlet클래스)
프레젠테이션레이어와 비즈니스레이어로 구성 된 시스템 구조
