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 回答