@Autowired 어노테이션은 의존 관계를 자동으로 설정할 때 사용되며 타입을 이용해 의존하는 객체를 삽입해 준다.
@Autowired 어노테이션은 생성자, 필드, 메서드의 세 곳에 적용이 가능하다.
예 ) 프로퍼티 설정 메서드에 적용
public class MonitorView implements Viewr{
private DisplayStrategy displayStrategy ;
@Autowired
public void setDisplayStrategy(DisplayStrategy displayStrategy ) {
this.displayStrategy = displayStrategy ;
}
}
@Autowired 어노테이션은 타입을 이용한 프로퍼티 자동 설정 기능을 제공한다. 따라서,
위 코드는 displayStrategy 프로퍼티에 DisplayStrategy 타입의 빈 객체를 전달한다.
@Autowired 어노테이션은 프로퍼티 설정 메서드 뿐 아니라 일반 메서드에서도 적용이 가능하다.
public class HomeContrloller {
private AlarmDevice alarmDevice ;
private Viwer viewer ;
@Autowired
public void prepare( AlarmDevice alarmDevice , Viwer viwer ){
this.alarmDevice = alarmDevice ;
this.viwer = viwer ;
}
}
위 경우 스프링은 HomeController 객체를 생성할 때 prepare()에 AlarmDevice 타입의 빈 객체와 Viwer 타입의 빈 객체를 전달한다.
또한 멤버 필드에 직접 적용해도 된다.
@Autowired
private DisplayStrategy displayStrategy ;
@Autowired 어노테이션을 배열에 적용하면 해당 타입의 모든 빈 객체를 배열로 전달 받는다.
1) @Autowired 어노테이션 적용 프로퍼티의 필수 여부 지정
@Autowired 어노테이션은 타입을 이용해 자동적으로 프로퍼티 값을 설정하므로 해당 타입의 빈 객체가 존재하지 않거나 또는
빈 객체가 두 개 이상 존재할 경우 @Autowired 어노테이션이 적용된 빈 객체를 생성할 때 예외를 발생시키게 된다.
하지만 @Autowired 어노테이션을 적용한 프로퍼티를 반드시 설정할 필요가 없는 경우도 있는데, 이런 경우
@Autowired 어노테이션에 requred 속성의 값을 false로 지정해 주면된다.
public class MonitorView implements Viewr{
private DisplayStrategy displayStrategy ;
@Autowired(reqired=false)
public void setDisplayStrategy(DisplayStrategy displayStrategy ) {
this.displayStrategy = displayStrategy ;
}
}
required 속성의 값을 false로 지정할 겨우, 해당 타입의 빈 객체가 존재하지 않더라도 예외를 발생하지 않는다.
2) @Qualifier 어노테이션을 이용한 자동 설정 제한
@Autowired는 타입을 기반으로 하므로 자동 설정할 타입이 두 개 이상 존재할 경우 예외를 발생시킨다.
이런 경우 @Qualifier 어노테이션을 이용해 동일한 타입의 빈 객체들 중에서 특정 빈을 사용하도록 할 수 있다.
@Qualifier 어노테이션은 @Autowired 어노테이션과 함께 사용된다.
@Qualifier 어노테이션은 자동 연결될 빈 객체의 수식어를 값으로 갖는다.
public class HomeController{
@Autowired
@Qualifier("main")
private Recorder recorder ;
...
}
위 코드는 recorder 멤버 필드에 Recorder 타입의 빈 객체를 자동 연결하는데, 수식어가 "main"인 빈 객체를 연결한다는 것을 의민한다.
빈 객체의 수식어는 설정 파일에서 <qualifier> 태그를 이용해 설정할 수 있다.
<bean id ="recorder" class="madvirus.spring.chap04.homecontrol.Recorder">
<qualifier value = "main" />
</bean>
<qualifier> 태그의 value 속성의 값을 @qualifier 어노테이션의 값으로 사용하게 된다.
생성자나 메서드가 2개 이상의 파라미터를 갖는 경우 @Qualifier 어노테이션을 각 파라미터에 적용함으로써 각 파라미터에 전달되는 빈 객체를 한정할 수도 있다,
@Autowired
public void prepare(AlarmDevice alarmDevice , @Qualifier("center") Viewer viewer){
this.alarmDevice = alarmDevice ;
this.viewer = viewer ;
}
'개발 > Spring' 카테고리의 다른 글
@PostConstruct 어노테이션 및 @PreDestroy 어노테이션과 라이프 사이클 (0) | 2018.02.15 |
---|---|
@Resource 어노테이션을 이용한 프로퍼티 설정 (0) | 2018.02.15 |
의존 관계 자동 설정 (0) | 2018.02.15 |
빈 생성 (0) | 2018.02.15 |
aop (0) | 2018.02.15 |