@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
// instantiate, configure and return bean ...
}
}
초기화 과정에서 특정 값을 지정할 경우엔 다음과 같이 할 수 있을 것이다. (@Value, @Autowired, ..)
@Configuration
@PropertySource("classpath:/com/acme/app.properties")
public class AppConfig {
@Inject Environment env;
@Value("${bean.name}") String beanName;
@Bean
public MyBean myBean() {
// return new MyBean(env.getProperty("bean.name"));
// or
// return new MyBean(beanName);
}
}
여러 개의 @Configuration 간 의존 관계는 @Autowired나 클래스 상단에 @Import 구문을 이용해 지정할 수 있다.
@Configuration을 <XML>로 표현하면 다음과 같다.
<beans>
<context:annotation-config/> <!-- enable ConfigurationClassPostProcessor -->
<bean class="com.acme.AppConfig"/>
</beans>
참고로 @Configuration 어노테이션을 사용한 클래스에서 @Bean 어노테이션을 사용한 함수가 리턴하는 객체는 Singleton으로 관리된다.
적용된 내용은 AnnotationConfigApplicationContext로 가져올 수 있다.
ApplicationContext context = new AnnotationConfigApplicationContext();
context.register(AppConfig.class);
context.refresh();
MyBean myBean = ctx.getBean(MyBean.class);
// use myBean...
@Bean 어노테이션과 함께 initMethod, destroyMethod를 지정할 수 있는데 이는 각각 초기화/종료 메서드에 대한 것이다.
@Configuration과 @Bean은 @Profile 어노테이션과 결합하여 'production', 'development' 등 환경에 따라 다르게 동작하게끔 할 수 있다.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html
댓글 없음:
댓글 쓰기