[Spring] Auto DI 의존자동주입
in Tech-Stack on Spring
의존자동주입 Auto DI
어노테이션을 사용한 의존 자동 주입에 대해 정리한다.
의존자동주입에는 2가지 방법이 있다.
- @Autowired
- @Resource
1. @Autowired
- 생성자, 필드, 메서드, 매개변수에 적용하면 해당 타입에 할당할 수 있는 bean 객체를 찾아서 주입대상으로 자동 지정한다.
<!-- appCtx.xml --> <context:annotation-config /> <bean id="memberDao" class="examspring02.MemberDao"></bean>// MemberRegisterService.java @Autowired public MemberRegisterService(MemberDao memberdao) { this.memberDao = memberdao; }
- 동일한 타입을 가진 bean 객체가 여러개 존재한다면
qualifier와@Qualifier(value)를 통해 bean 객체를 지정할 수 있다.<!-- appCtx.xml --> <context:annotation-config /> <bean id="dao1" class="examspring02.MemberDao"> <qualifier value="daoA" /> </bean> <bean id="dao2" class="examspring02.MemberDao"> <qualifier value="daoB" /> </bean>// MemberRegisterService.java // daoB bean 객체를 지정해서 사용 @Autowired @Qualifier("daoB") public MemberRegisterService(MemberDao memberdao) { this.memberDao = memberdao; }
@Autowired어노테이션 적용 순서- 타입이 같은 bean 객체를 검색
- bean 객체가 1개면 그 객체를 사용
- bean 객체가 2개 이상 존재
@Qualifier로 지정한 bean 객체를 찾아 주입@Qualifier로 지정한 bean 객체가 없다면 이름이 같은 bean 객체를 찾아 주입
- 매칭되는 bean 객체를 찾지 못할 경우 스프링은 예외를 발생시킨다.
required=false를 지정하면 예외가 발생하지 않는다.
- 타입이 같은 bean 객체를 검색
2. @Resource
- Resource 어노테이션은 bean의 이름을 검색하여 자동 주입 동작한다.
- 자동 주입 대상에
@Resource어노테이션을 사용한다. - xml에
<contextannotation-config />태그를 추가해야 된다. ```xml
```java // MemberRegisterService.java @Resource(name="dao") public MemberRegisterService(MemberDao memberdao) { this.memberDao = memberdao; }
- 자동 주입 대상에
- 생성자에는 적용할 수 없다.
