반응형
스프링을 통한 의존성 주입-@Autowired vs. @Resource vs. <property> 태그
1) XML 설정-한 개의 빈이 id 없이 tire 인터페이스를 구현한 경우
//expert006.xml
....
<beans ...>
<context:annotation-config />
<bean class="expert006.KoreaTire"></bean>
<bean id="car" class="expert006.Car"></bean>
</beans>
//Car.java-@Resource를 이용한 tire 속성 주입
public class Car {
@Resource
Tire tire;
public String getTireBrand() {
return "장착된 타이어: "+tire.getBrand();
}
}
//Car.java-@Autowired를 이용한 tire 속성 주입
public class Car {
@Autowired
Tire tire;
public String getTireBrand() {
return "장착된 타이어: "+tire.getBrand();
}
}
각각의 경우 Driver.java를 실행해보면 두 경우 모두 문제 없이 실행됩니다.
2) XML 설정-두 개의 빈이 id 없이 tire 인터페이스를 구현한 경우
//expert006.xml
....
<beans ...>
<context:annotation-config />
<bean class="expert006.KoreaTire"></bean>
<bean class="expert006.AmericaTire"></bean>
<bean id="car" class="expert006.Car"></bean>
</beans>
@Resource와 @Autowired를 이용한 경우 각각 문제가 발생합니다.
3) XML 설정-두 개의 빈이 tire 인터페이스를 구현하고 하나가 일치하는 id를 가진 경우
//expert006.xml
....
<beans ...>
<context:annotation-config />
<bean id="tire" class="expert006.KoreaTire"></bean>
<bean id="tire2" class="expert006.AmericaTire"></bean>
<bean id="car" class="expert006.Car"></bean>
</beans>
@Resource와 @Autowired를 이용한 경우 각각 정상적으로 작동합니다.
4) XML 설정-두 개의 빈이 tire 인터페이스를 구현하고 일치하는 id가 없는 경우
//expert006.xml
....
<beans ...>
<context:annotation-config />
<bean id="tire1" class="expert006.KoreaTire"></bean>
<bean id="tire2" class="expert006.AmericaTire"></bean>
<bean id="car" class="expert006.Car"></bean>
</beans>
@Resource와 @Autowired를 이용한 경우 각각 문제가 발생합니다.
5) XML 설정-일치하는 id가 하나 있지만 인터페이스를 구현하지 않은 경우
//expert006.xml
....
<beans ...>
<context:annotation-config />
<bean id="tire" class="expert006.Door"></bean>
<bean id="car" class="expert006.Car"></bean>
</beans>
//Door.java
public class Door {
}
Door 클래스에서 tire 인터페이스를 구현하지 않았습니다.
@Resource와 @Autowired를 이용한 경우 각각 서로 다른 문제가 발생합니다.
- @Autowired와 @Resource 중에서는 @Resource 추천
- @Resource와 <property> 중에서는 <property> 추천
6) XML 설정-두 개의 빈이 tire 인터페이스를 구현하고 속성과 일치하는 id가 없지만 @Resource 어노테이션의 name 속성이 id와 일치하는 경우
//expert006.xml
....
<beans ...>
<context:annotation-config />
<bean id="tire1" class="expert006.KoreaTire"></bean>
<bean id="tire2" class="expert006.AmericaTire"></bean>
<bean id="car" class="expert006.Car"></bean>
</beans>
//Car.java-@Resource를 이용한 tire 속성 주입
public class Car {
@Resource(name="tire1")
Tire tire;
public String getTireBrand() {
return "장착된 타이어: "+tire.getBrand();
}
}
정상적으로 작동합니다.
7) 6번과 같도록 @Autowired를 지정하는 경우
//Car.java-@Autowired를 이용한 tire 속성 주입
public class Car {
@Autowired
@Qualifier("tire1")
Tire tire;
public String getTireBrand() {
return "장착된 타이어: "+tire.getBrand();
}
}
위와 같이 @Qualifier("tire1")을 이용합니다.
8) 실무에서 사용하는 방식
//expert006.xml
....
<beans ...>
<context:annotation-config />
<bean id="tire" class="expert006.KoreaTire"></bean>
<bean id="tireOther" class="expert006.AmericaTire"></bean>
<bean id="car" class="expert006.Car"></bean>
</beans>
//Car.java
public class Car {
@Resource(name="tire")
Tire tire;
public String getTireBrand() {
return "장착된 타이어: "+tire.getBrand();
}
}
반응형
'Spring > additional' 카테고리의 다른 글
[Spring] 스프링 AOP 5대 용어 (0) | 2021.02.28 |
---|---|
[Spring] 스프링 삼각형1_IoC/DI (0) | 2021.02.28 |
[디자인 패턴] Decorator Pattern(데코레이터 패턴) (0) | 2021.02.21 |
[디자인 패턴] Proxy Pattern(프록시 패턴) (0) | 2021.02.21 |
[디자인 패턴] Adapter Pattern(어댑터 패턴) (0) | 2021.02.21 |