2013-05-08 5 views
0

프로그래밍 방식으로 beanPathProcessor를 ClassPathXmlApplicationContext에 추가하는 방법이 있습니까?어떻게 프로그래밍 방식으로 beanPathProcessor를 ClassPathXmlApplicationContext에 추가 할 수 있습니까?

XML에서 선언적으로 할 수 있지만 프로그래밍 방식으로 추가 할 방법은 없습니다.

내 프로세서가 MyInterfaceAware 인 경우 프로세서가 뭔가를 수행하고 setMyInterface (...)를 수행해야합니다.

MyInterface 구현이 코드에서 인스턴스화 되었기 때문에 코드에서 수행해야합니다. XML을 시작할 때 사용할 수 없습니다.

저는 Spring 3.1.2.RELEASE를 사용하고 있습니다.

감사합니다,

가 ...이 내가 뭘하는지는 ...

public void setSpringBeanFactory(BeanFactory beanFactory) { 
    this.beanFactory = (ApplicationContext) beanFactory; 
    ((ClassPathXmlApplicationContext) beanFactory).getBeanFactory().addBeanPostProcessor(new BeanPostProcessor() { 

     public Object postProcessBeforeInitialization(Object bean, 
       String beanName) throws BeansException { 
      return bean; 
     } 

     public Object postProcessAfterInitialization(Object bean, 
       String beanName) throws BeansException { 
      if (bean instanceof RegistryAware) 
       ((RegistryAware) bean).setRegistry(ApplicationContextRegistryImpl.this); 
      return bean; 
     } 
    }); 
    ((ClassPathXmlApplicationContext)beanFactory).refresh(); 
} 

답변

2

당신은 또한 BeanFactoryPostProcessor를 사용할 수 context.getBeanFactory().addBeanPostProcessor(beanPostProcessor)

편집

으로 시도 :

public class RegistryBeanPostprocessorConfigurer implements BeanFactoryPostProcessor { 

    @Override 
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { 
     beanFactory.addBeanPostProcessor(getRegistryBeanPostProcessor()); 
    } 
} 

context.addBeanFactoryPostProcessor(new RegistryBeanPostProcessorConfigurer()); 
context.refresh(); 
+0

이렇게 쉬운가요? 작동하지 않습니다! –

+0

프로세서가 호출되지 않습니다. –

+1

refresh() 후에 BeanPostProcessor를 추가하십시오. 내부 BF는 각 refresh()에서 다시 작성됩니다. 이전에 BPP가 필요하면 postProcessBeanFactory()를 재정 의하여 등록하십시오. (수퍼 전화를 잊지 마세요) –