- Spring에서의 annotation 활용
: Dependency Injection (bean wiring)
: Bean 탐색 및 등록
: Java code 기반 설정
- annotation을 처리하려면 BeanPostProcessor가 필요
: 번거로운 방법 - BeanPostProcessor 객체를 설정 파일에 bean으로 등록
: 일반적인 방법 - xml 파일에 <context:annotation-config /> 입력
- annotation은 일종의 인터페이스로 선언되어 있음
★ @Required
- setter 메소드 앞에 사용
- property의 값 또는 의존 객체가 반드시 설정되어야 함
- 설정되지 않으면 BeanInitializationException
- 그니까 bean 설정하면서 제대로 주입했나 코드 안빼먹었나 확인할 수 있으니까 좋음
★ @Autowired
- Auto-wiring 수행 (DI 자동수행)
- default : byType
- 생성자 앞, 필드 앞, 메소드 앞 다 사용 가능
- 같은 타입이 여러개면 에러 NoSuchBeanDefinitionException
- 근데 에러에서 끝나는게 아니고 일단 대안을 찾아봄
- byName으로 찾아봄
- byType ---> byName ---> 에러
- 같은 타입, 같은 이름 하나도 없어도 에러
- 속성 : required
: 반드시 주입이 필요한지 여부
: default=true 즉, @Autowired 이면 반드시 DI가 실행되어야 함
: false 이면 할당할 bean이 없어도 에러는 안남
- collection 타입은 일단 각각의 원소를 다 주입함... 더 공부해
- 필드나 세터 앞에 쓰기
- 생성자 앞에 쓰기
- 일반 메소드 앞에 쓰기
★ @Qualifier
- 자동 주입 가능한 의존 객체가 여러 개 존재할 때 특정 객체를 선택하도록 지정
- 특정 객체를 명시적으로 지정
- 항상 @Autowired 랑 같이 쓰임
- 같이 안쓰이고 혼자쓰이면 그건 그냥 별명 붙이기 용도
- 같이 써야 DI
< Bean Scan >
★ @Component @Repository @Service @Controller @Configuration
- 이게 붙어있는거는 자동으로 bean으로 등록해라~
- 그러니까 xml 파일에 <bean~ 코드가 없어도 되지
- @Component("nang")
===> id가 nang인 bean이 등록된다
- id 따로 지정안할거면 안붙임
- 안붙이면? 클래스 이름이 id가 됨 / 클래스 이름 소문자로 한거
- Bean Scan을 사용하려면(@Component...) xml 파일에
- 써놓은 패키지 하위 클래스들을 다 뒤짐
- <context:annotation-config /> 이거보다 상위 개념이라 scan 쓰면 config 다 됨
- <context:include-filter /> : 자동 scan에 포함시킬 class 지정
- <context:exclude-filter /> : 자동 scan에서 제외시킬 class 지정
'SPRING' 카테고리의 다른 글
Bean Scope (Bean 유효범위) (0) | 2019.03.28 |
---|---|
DI Java Code (0) | 2019.03.27 |
Auto-wiring (0) | 2019.03.25 |
DI XML / SpEL (property 방식) (0) | 2019.03.19 |
DI XML / Collection Wiring (property 방식) (0) | 2019.03.19 |