[Spring] Spring에서 dynamic하게 bean 을 생성하는 법 / ConfigurableListableBeanFactory.registerSingleton()
general java 2015. 3. 25. 23:56dynamic하게 bean 을 생성하는 법은 두 가지 (BeanFactoryPostProcessor, BeanPostProcessor)를 활용한 방식이다.
1. BeanFactoryPostProcessor
예제)
API)
2. BeanPostProcessor
예제)
API)
참골, ConfigurableListableBeanFactory 는 SingletonBeanRegistry를 상속받았기 때문에 singleton bean을 container에 추가할 수 있다. 특이한 것은 BeanDefinition과 무관하게 임의의 이름으로 spring container에 추가할 수 있다는 큰 장점이 있다.
아래 예제는 SimpleBean에 임의의 이름 xxxxxsimplebean으로 SimpleBean 을 Binding하였다. ConfigurableListableBeanFactory.registerSingleton() 메소드는 BeanDefinition과 상관없다. 따라서 ApplicationContext.removeBeanDefinition()을 호출하면, "org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xxxxxsimplebean' is defined"이 발생한다.
* SimpleBean.java
public class SimpleBean {
public void print() {
System.out.println("Simple Bean!");
}
}
public void print() {
System.out.println("Simple Bean!");
}
}
* 코드
@Test
public void test() {
StaticApplicationContext applicationContext = new StaticApplicationContext();
ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
beanFactory.registerSingleton("xxxxxsimplebean", new SimpleBean());
SimpleBean bean = (SimpleBean)applicationContext.getBean("xxxxxsimplebean");
bean.print();
public void test() {
StaticApplicationContext applicationContext = new StaticApplicationContext();
ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
beanFactory.registerSingleton("xxxxxsimplebean", new SimpleBean());
SimpleBean bean = (SimpleBean)applicationContext.getBean("xxxxxsimplebean");
bean.print();
SimpleBean bean1 = (SimpleBean) beanFactory.getSingleton("xxxxxsimplebean");
bean1.print();
// applicationContext.removeBeanDefinition("xxxxxsimplebean"); // 에러applicationContext.close();
}
* 결과 화면
Simple Bean!
Simple Bean!
'general java' 카테고리의 다른 글
Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar (0) | 2015.03.26 |
---|---|
[play1] python 2.4에서의 1.3.0 실행 (0) | 2015.03.26 |
[Guava] HashBiMap (0) | 2015.03.25 |
godeps와 비슷하게 git의 revision으로 dependency 관리하기 (0) | 2015.03.25 |
Apache Common Lang의 StringUtils 예제 (0) | 2015.03.19 |