Spring DI - Annotation
@Annotation 방식
xml 파일에는 구동시킬 필수 요소만 작성하고 소스코드에 Annotation으로 표시하여 구동하는 방식
(필수 요소 = <context:component-scan>)
▶ @Annotation 종류 - Bean 등록 시 사용
@Component
객체(컴포넌트)를 나타내는 일반적인 타입으로 <bean> 태그와 동일한 역할
내가 <bean>으로 만들고 싶은 클래스 위에 어노테이션을 붙인다.
xml → <bean> java → @Bean @Annotation → @Component |
▶ @Annotation 종류 - 의존성 주입 시 사용
@Autowired
- 정밀한 의존 관계 주입(DI)이 필요한 경우에 유용하다.
- 필드 변수, setter 메소드, 생성자, 일반 메소드에 적용이 가능하다.
- 의존하는 객체를 주입할 때 Type을 이용한다.
- <property>, <constructor-arg> 태그와 동일한 역할이다.
▷ Qualifier
- @Autowired와 함께 쓰인다.
- 한 프로젝트 내에 @Autowired로 의존성을 주입하고자 하는 객체가 여러 개일 경우, @Qualifier("name")으로 원하는 객체를 지정하여 주입한다.
@Resource
- 애플리케이션이 필요로 하는 자원을 자동 연결할 때 사용한다.
- 프로퍼티, setter 메소드에 적용 가능하다.
- 의존하는 객체 주입 시 Name을 이용한다.
@Value
- 단순한 값(기본 리터럴 값) 주입 시 사용된다.
@Autowired와 @Resource의 차이점?
- 공통점 : @Component로 의존관계를 설정한 객체로부터 의존 관계를 자동으로 주입한다.
- 차이점 : @Autowired는 타입으로, @Resource는 이름으로 연결한다.
Spring Annotation 빈 스캐닝(Bean Scanning)
▷ <context:component-scan> 태그
<context:component-scan base-package="경로" />
- @Component를 통해 자동으로 Bean을 등록한다.
- @Autowired로 의존 관계를 주입받는 어노테이션을 클래스에서 선언했을 경우, 해당 클래스가 위치한 특정 패미지를 Scan하기 위한 설정을 XML에 해줄 때 사용한다.
- 어느 위치에서부터 @Component 어노테이션이 붙은 bean을 찾을 것인지 지정
- base-package와 하위 package를 스캐닝하면서 @Component가 붙은 클래스를 Bean 객체을 만들어서 ApplicationContext에서 가지고 있겠다.
▶ xml 버전
- Bean으로 등록하고 싶은 클래스에 @Component를 붙인다.
- root-config.xml 에 <context:component-scan base-package="경로" /> 등록한다.
▶ JAVA 버전
- XXConfig.java 설정 파일에 @ComponentScan("base-package 지정")을 붙인다.
▷ Bean Scanning
빈으로 사용할 클래스에 어노테이션을 부여하고, Spring 컨테이너가 자동으로 Bean을 등록하는 방식을
빈 스캐닝을 통한 자동 인식 Bean 등록 기능 이라고 한다.
장점 | - 어노테이션을 부여하고 자동 스캔으로 Bean을 등록하면, XML 문서 생성, 관리가 불필요하고, 개발 속도를 향상시킬 수 있다. - 개발 자 간 XML 설정 파일 충돌을 최소화한다. |
단점 | - 해당하는 클래스 파일을 찾아서 들어가야 한다. - 애플리케이션에 등록될 Bean이 어떤 것들인지, Bean 들 간의 의존 관계가 어떻게 되는지 한 눈에 파악하기 어렵다. |
'Programming > Framework' 카테고리의 다른 글
DAY 150. Spring Annotation (0) | 2022.01.15 |
---|---|
DAY 149. Spring AOP(Aspect Oridented Programming) (0) | 2022.01.14 |
DAY 147. Spring DI(Dependency Injection) 의존성 주입 (0) | 2022.01.12 |
DAY 146. Spring IOC(Inversion of Control) (0) | 2022.01.11 |
DAY 145. Spring 개요 (0) | 2022.01.10 |