0

プログラムで beanPostProcessor を ClassPathXmlApplicationContext に追加する方法はありますか?

XMLで宣言的に行うことはできますが、明らかにプログラムで追加する方法はありません。

私のプロセッサは、Bean が 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();
}
4

1 に答える 1

3

試してみてくださいcontext.getBeanFactory().addBeanPostProcessor(beanPostProcessor)

編集

BeanFactoryPostProcessor以下も使用できます。

public class RegistryBeanPostprocessorConfigurer implements BeanFactoryPostProcessor {

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

context.addBeanFactoryPostProcessor(new RegistryBeanPostProcessorConfigurer());
context.refresh();
于 2013-05-08T20:24:43.657 に答える