Mixing XML and annotations
원문 : Chapter 6. Mixing XML and annotations
Java 설정과 XML 설정은 상호 베타적이지 않다. 하나의 Spring 애플리케이션에서 모두 사용될 수 있다. XML 파일에 있는 bean을 가져오기 위해서는, Spring 컨테이너를 사용해야 한다. 이전에 언급했다시피, @ExternalBean 애노테이션(추천하는 방식)을 사용하여 그렇게 할 수 있다. 이렇게 하고 싶지 않거나 이런 방법이 부적절한 경우네는, @Configuration 클래스에의해 사용되는 beanFacotry에 접근할 수 있다. 이렇게 하려면, 설정 클래스가 ConfigurationSupport 를 상속하거나 BeanFacrtoryAware 인터페이스를 구현하도록 하면 된다.
다음의 XML 설정을 살펴보자.
<bean id="myBean" class="MyBean"/>
myBean을 Java에서 참조하려면 다음과 같이 작성할 수 있다.
@Configuration
public class MyConfig extends ConfigurationSupport {
@Bean
public ExampleBean anotherBean() {
ExampleBean bean = new ExampleBean("anotherBean");
bean.setDep(getBean("myBean")); // use utility method to get a hold of 'myBean'
return bean;
}
}
@Configuration
public class MyOtherConfig implements BeanFactoryAware {
private BeanFactory beanFactory;
public void setBeanFactory(BeanFactory beanFactory) {
// get access to the owning bean factory
this.beanFactory = beanFactory;
}
@Bean
public ExampleBean yetAnotherBean() {
ExampleBean bean = new ExampleBean("yetAnotherBean");
bean.setDep(beanFactory.getBean("myBean")); // use dependency lookup
return bean;
}
}
다시 한 번 강조하지만, ConfigurationSupport나 BeanFacrtoryAware를 사용하기 전에 똑같은 기능을 제공하는 (offers the same capability in a refactoring friendly manner) @ExternalBean을 사용하고 싶지는 않은지 재고하기 바란다.
JavaConfig 배포판에 변경된 Petclinic 예제에 보면 몇몇 XML 설정 부분을 Java와 Groovy로 교체한 것이 있다. 샘플 폴더를 살펴보길 바란다.