2020/05/30 - [🌎Web Application/Spring] - [Spring] DI (Dependency Injection) part 1
2020/05/30 - [🌎Web Application/Spring] - [Spring] DI (Dependency Injection) part 2
2020/05/30 - [🌎Web Application/Spring] - [Spring] DI (Dependency Injection) part 3
2020/05/30 - [🌎Web Application/Spring] - [Spring] DI (Dependency Injection) part 4
2020/05/30 - [🌎Web Application/Spring] - [Spring] DI (Dependency Injection) part 5
2. Annotation 방식
@Component
빈을 등록하길 원하는 클래스에 추가.
<context:component-scan> 태그에 spring이 bean으로 등록할 클래스가 위치한 패키지를 지정.
해당 어노테이션이 붙은 클래스는 모두 빈으로 생성. <bean id="..."></bean>과 같다. 이때 id는 클래스의 이름이자 앞 글자가 소문자인 이름.
*클래스 명이 SomeClass면 id는 someClass가 기본값.
*bean이름을 직접 지정할 경우, @Component("mySomeClass") 로 지정.
<context:component-scan base-package="com.test01.anno"></context:component-scan>
=> base-package 안에 정의한 패키지의 컴포넌트들을 스캔하겠다. / annotation을 달아 둔 클래스들을 스캔하겠다. / 해당 패키지 안에 있는 클래스들을 다 스캔한다는 뜻이다.
@Autowired
주입하려고 하는 객체의 타입이 일치하는지를 찾고 생성되어 있는 빈을 자동으로 주입.
만약에 타입이 존재하지 않는다면 @Autowired에 위치한 속성명이 일치하는 bean을 컨테이너에서 찾는다. 그리고 이름이 없을 경우 나중에 포스팅할 @Qualifier 어노테이션의 유무를 찾아 그 어노테이션이 붙은 속성에 의존성을 주입한다.
(정리) 타입 => 이름 => Qualifier => Fail
-spring에서 의존관계를 자동으로 설정.
-byType으로 의존관계를 자동으로 설정할 경우 같은 타입의 bean이 2개 이상 존재하게 되면 예외 발생.
--> @Qualifier("test") 를 이용하여 특정 빈을 사용하도록 하여 문제 해결 가능. 같은 타입의 bean들 중 test를 사용하겠다.
@Qualifier
@Autowired 어노테이션이 타입기반 이기에 같은 타입 2개 이상 존재할 경우
특정 bean을 사용하도록 선언.
@Resource
이름을 기준으로 객체를 찾는다. 만일 이름이 존재하지 않는다면 타입을 기준으로 자동적으로 객체를 찾아 주입한다. 마지막으로 @Qualifier 어노테이션의 유무를 판별한 후 그 어노테이션이 붙은 속성을 주입한다.
'⚙️Backend > Spring' 카테고리의 다른 글
[Spring] AOP(Aspect Oriented Programming) part 2 (0) | 2020.05.30 |
---|---|
[Spring] AOP(Aspect Oriented Programming) part 1 (0) | 2020.05.30 |
[Spring] DI (Dependency Injection) part 5 (0) | 2020.05.30 |
[Spring] DI (Dependency Injection) part 4 (0) | 2020.05.30 |
[Spring] DI (Dependency Injection) part 3 (0) | 2020.05.30 |