티스토리 뷰
의존성 주입을 위해 사용되는 어노테이션은 @Autowired, @Resource, @Inject 가 있는데 이 중 비슷한 @Autowired와 @Inject를 비교해보자.
@Autowired vs @Inject
@Autowired
private InjectionBean injectionBean;
@Inject
private InjectionBean injectionBean;
두 어노테이션 모두 컨테이너상에서 데이터 타입이 같은 Bean을 찾아 의존성을 주입해주는 방식으로 주입 방식과 역할은 동일하며 2가지 차이점을 제외하면 이 둘은 거의 동일하다고 볼 수 있다.
차이점
1. 스프링 컨테이너에 Bean 객체가 존재하지 않을 경우 예외처리 방식
이럴 경우는 거의 없겠지만, 프로그래머가 컨테이너에 Bean을 생성하지 않고 자동주입을 시도하게되면 예외가 발생하게되는데, @Autowired는 이런 예외처리를 할 수 있다.
@Autowired(required = false)
private InjectionBean injectionBean;
그러나 property말고도 생성자, Setter 등 Bean을 가져오는 요소들에 모두 required를 적용해줘야 하기 때문에 번거로울 뿐 아니라, 컨테이너에 생성하지 않은 Bean을 자동주입 하는 상황이 발생할 가능성이 희박하기 때문에 큰 의미를 가지긴 어렵다.
2. 스프링 컨테이너에 동일한 타입을 가진 Bean이 두 개 이상 존재할 때 예외처리 어노테이션
@Autowired 같은 경우 같은 타입의 Bean이 두 개 이상 존재할 때, 컨테이너상에 명시한 <qualifier> 태그의 value 속성 값을 @Qualifier 어노테이션에 명시해주면 된다.
<bean id="injectionBean1" class="scope.ex.InjectionBean">
<qualifier value = "injectionBean1"/>
</bean>
<bean id="injectionBean2" class="scope.ex.InjectionBean">
<qualifier value = "injectionBean2"/>
</bean>
<bean id="injectionBean3" class="scope.ex.InjectionBean">
<qualifier value = "injectionBean3"/>
</bean>
Controller
@Autowired(required = false)
@Qualifier("injectionBean1")
private InjectionBean injectionBean;
@Inject는 컨테이너상에 <qualifier> 태그를 명시할 필요 없이 @Named 어노테이션에 Bean id 값을 지정해줌으로써 해당 상황을 처리할 수 있다.
Controller
@Inject
@Named(value="injectionBean1")
private InjectionBean injectionBean;
출처 : [인프런] 자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
'Programming > Spring' 카테고리의 다른 글
Java파일 (어노테이션)을 이용한 스프링 컨테이너 설정 (0) | 2022.03.22 |
---|---|
스프링 컨테이너와 Bean객체의 생명주기 (0) | 2022.03.19 |
스프링 의존객체 선택 (0) | 2022.03.17 |
스프링 어노테이션을 활용한 의존객체 자동주입 (0) | 2022.03.12 |
스프링 Bean의 범위 - 싱글톤과 프로토타입 (0) | 2022.03.12 |
- Total
- Today
- Yesterday
- 인턴
- C
- 오류
- 국비교육
- C++
- 오라클
- SQL
- JVM
- 개발용어
- JSP
- svn
- 넥사크로
- HeidiSQL
- 스프링
- 스프링부트
- 환경설정
- CSS
- 백준
- Thymeleaf
- Open API
- 데이터베이스
- CS
- Java
- 네트워크
- 이클립스
- 부트스트랩
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |