@Configuration과 @Bean 어노테이션을 이용해서 스프링 컨테이너에 새로운 빈 객체를 제공할 수 있음
MyHome01.java
package vo; public class MyHome01 implements MyHome { |
MyHome02.java
package vo; public class MyHome02 implements MyHome{ |
SpringConfig.java
package config; import org.springframework.context.annotation.Bean; import vo.MyHome01;
@Configuration
@Bean |
@Bean
public MyHome01 myHome01(){
return new MyHome01();
}
이 부분의 XML의 다음과 설정이 같다.
<bean id="myHome01" class="vo.MyHome01"/>
즉, @Bean이 적용된 메서드의 이름을 빈의 식별값으로 사용
만약 메서드의 이름이 아닌 다른 이름으로 빈 객체의 이름을 사용하고 싶다면 @Bean 어노테이션의 name 속성을 사용
AbstractServiceImpl.java
package service; import org.springframework.context.annotation.Scope;
@Component("service01") } |
AbstractServiceImpl02.java
package service; import org.springframework.stereotype.Component;
@Component("service02") } |
AbstractController.java
package controller; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import service.AbstractService;
@Component
@Resource(name="service01") |
spring301-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" <context:annotation-config/> |
@Configuration 어노테이션이 적용된 클래스는 @Component 어노테이션이 적용된 클래스와 마찬가지로 컴포넌트 스캔 대상이므로 스캔범위만 지정해주면 따로 빈을 등록할 필요가 없어짐
<context:component-scan base-package="config"/>
<!-- bean id="springConfig" class="config.SpringConfig"></bean --> //컴포넌트 스캔을 사용하지 않는다면 직접 빈을 등록해 줘야 함(위 코드에서 주석 삭제) |
결과
START >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
■중요
@Configuration 어노테이션을 적용한다고 해서 스프링 컨테이너가 해당 클래스로부터 빈 정보를 구할 수 있는 것은 아님 =>
XML 설정 파일에 @Configuration 클래스를 사용하려면 ConfigurationClassPostProcessor 클래스와 @Configuration 어노테이션이 적용된 클래스를 스프링 설정 파일에 빈 객체로 등록해야 함
적용 방법은 다음과 같음
<bean class="org.springframework.context.annotation.ConfigurationClassPostProcessor"/> <bean id="springConfig" class="config.SpringConfig"/> |
ConfigurationClassPostProcessor 클래스는 @Configuration 어노테이션이 적용된 빈 객체에서 @Bean 어노테이션이 적용된 메서드로부터 빈 객체를 가져와 스프링 컨테이너에 등록
<context:annotation-config/> 태그를 사용하면 ConfigurationClassPostProcessor를 등록하지 않아도 됨
@Configuration 어노테이션이 적용된 클래스로부터 생성한 빈 객체들도 다른 빈과 동일하게 @Required, @Autowired, @Resource 어노테이션을 이용해서 의존관계를 설정할 수 있음
[참고자료] Spring 3.0 프로그래밍 - 최범균
'프로그램 > Spring 3.0' 카테고리의 다른 글
서로 다른 @Configuration 어노테이션 클래스 간의 의존 설정 (0) | 2012.04.26 |
---|---|
@Configuration, @Bean - 2(@ImportResource) (0) | 2012.04.26 |
@Component, <context:component-scan base-package=""/> (0) | 2012.04.25 |
@PostConstruct, @PreDestroy (0) | 2012.04.25 |
@Resource (0) | 2012.04.24 |