[Spring] 어노테이션 기반 설정
어노테이션 기반 설정
1. XML에서의 <context:annotation-config/> 설정
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans",
http://www.springframework.org/schema/context"
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/beans/spring-context-3.0.xsd">
<context:annotation-config/>
<!-- <context:component-scan> 태그를 이용해서 스프링이 클래스를 검색할 패키지를 지정하면 된다. <context:component-scan> 태그를 추가하면 스프링은 지정한 패키지에서 @Component 어노테이션 등이 적용된 클래스를 검색하여 빈으로 등록하게 된다.
<context:component-scan base-package="mad.spring.ch4.HomeController"/>-->
...
</beans>
<context:annotation-config/> 태그는 어노테이션과 관련해서 다음의 BeanPostProcessor를 등록해 준다.
- RequredAnnotationBeanPostProcessor: @Required 어노테이션 처리
- AutowiredAnnotationBeanPostProcessor:@Autiwired 어노테이션 처리
- CommonAnnotationBeanPostProcessor: @Ressource, @PostConstruct, @PreDestroy 어노테이션 처리
- ConfigurationClassProcessor: @Configuration 어노테이션 처리
2. @Autowired 어노테이션을 이용한 자동 설정
org.springframework.beans.factory.annotation 패키지에 위치한 @Autowired 어노테이션은 의존관계를 자동으로 설정할 때 사용된다.
@Autowired 어노테이션은 스프링 2.5에 추가된 기능으로 타입을 이용하여 의존하는 객체를 삽입해준다.
@Autowired 어노테이션은 타입을 이용한 프로퍼티 자동 설정 기능을 제공한다.
(1) 프로퍼티 설정 메서드에 적용한 예
import org.springframework.beans.factory.annotation.Autowired;
public class MonitorViewer implements Viewer{
private DisplayStrategy displayStrategy;
@Autowired
public void setDisplayStrategy(DisplayStrategy displayStrategy){
this.displayStrategy = displayStrategy;
}
}
위 코드는 displayStrategy 프로퍼티에 DisplayStrategy 타입의 빈 객체를 전달한다.
(2) 일반 메서드에 적용한 예
메서드 이름이 setXXX() 형식이 아니라도 @Autowired 어노테이션을 적용할 수 있다. 아래 코드는 prepare() 메서드에 @Autowired 어노테이션을 적용할 수 있는데,
이 경우 스프링은 HomeController 객체를 생성할 때 prepare() 메서드에 AlarmDevice 타입의 빈 객체와 Viewer 타입의 빈 객체를 전달한다.
import org.springframework.beans.factory.annotation.Autowired;
public class HomeController{
private AlarmDevice alarmDevice;
private Viewer viewer;
@Autowired
public void prepare(AlramDevice alarmDevice, Viewer viewer){
this.alarmDevice = alarmDevice;
this.viewer viewer;
}
...
}
(3) 멤버 필드에 적용한 예
멤버 필드에 직접 @Autowired 어노테이션을 적용해도 된다.
public class MonitorViewer implements Viewer{
@Autowired
private DisplayStrategy displayStrategy;
...
}
(4) 배열에 적용한 예
@Autowired 어노테이션을 배열에 적용하게 되면, 해당 타입의 모든 빈 객체를 배열로 전달 받는다. 예를 들어, 아래 코드와 같이 @Autowired 어노테이션을 적용하면 InfraredRaySensor 타입의 빈 객체가 배열로
setSensor() 메서드에 전달된다. 메서드 뿐만 아니라 배열 타입의 멤버 필드에 @Autowired 어노테이션을 적용해도 동일하게 동작한다.
public class HomeController{
...
private InfraredRaySensor[ ] sensors;
@Autowired
public void setSensors(InfraredRaySensor[ ] sensors){
this.sensors = sensors;
}
...
}
(5) 제네릭이 적용된 컬렉션 타입을 적용한 예
제네릭이 적용된 컬렉션 타입을 사용하는 경우 List 타입이나 Set 타입을 이용해서 특정 타입의 빈 객체 목록을 전달 받을 수 있다.
public class HomeController{
private List<InfraredRaySensor> sensor;
@Autowired
public void setSensors(List<InfraredRaySensor> sensors){
this.sensors=sensors;
}
}
3. @Resource 어노테이션을 이용한 프로퍼티 설정
@Resource 어노테이션은 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용된다.
스프링에서는 의존하는 빈 객체를 전달할 때 사용된다.
import javax,annotation.Resource;
public class HomeController{
@Resource(name="camera1")
private Camera camera1;
private Camera camera4;
@Resource(name="camera4);
public void setcamera4(Camera camera4){
this.camera4 = camera4;
}
...
}
스프링에서 @Resource 어노테이션을 사용하려면 name 속성에 자동으로 연결할 빈 객체의 이름을 입력하면 된다.
<bean class="org.springframework.beans.factory.annotation.RequredAnnotationBeanPostProcessor"/>
<context:annotation-config/>를 사용해도 좋다.
출처: https://devbox.tistory.com/entry/Spring-어노테이션-기반-설정?category=574587 [장인개발자를 꿈꾸는 :: 기록하는 공간]
'Spring Framework > Spring Core' 카테고리의 다른 글
[Spring] 뷰 지정 (0) | 2020.07.01 |
---|---|
[Spring] 컨트롤러 메서드의 파라미터 타입 (0) | 2020.07.01 |
[Spring] HTML 폼과 자바빈 객체 (0) | 2020.07.01 |
[Spring] 자바 코드 기반 설정 (0) | 2020.07.01 |
[Spring] 외부 설정 프로퍼티 (0) | 2020.07.01 |
[Spring] iBatis 2 (0) | 2020.07.01 |
[Spring] iBatis 1 (0) | 2020.06.10 |
[Spring] web.xml 기본 설정 (0) | 2020.06.10 |