小编典典

以编程方式将Bean添加到Spring Web App上下文

spring

由于采用了插件架构,因此我试图以编程方式将bean添加到我的webapp中。我有一个通过@Component注释创建的Spring bean ,并且正在实现ApplicationContextAware接口。

我的覆盖函数如下所示:

@Override
public void setApplicationContext(ApplicationContext applicationContext)
        throws BeansException {

    // this fails
    this.applicationContext = (GenericWebApplicationContext) applicationContext;
 }

基本上,我不知道如何向给setApplicationContext的applicationContext对象添加一个bean。谁能告诉我我将如何处理错误的方法?

好的,这就是我最终得到的解决方案:

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
        throws BeansException {
    BeanDefinition definition = new RootBeanDefinition(
            <My Class>.class);

    bdr.registerBeanDefinition("<my id>", definition);
}

阅读 464

收藏
2020-04-12

共2个答案

小编典典

在Spring 3.0中,你可以使自己的bean实现BeanDefinitionRegistryPostProcessor并通过来添加新的bean BeanDefinitionRegistry

在早期版本的Spring中,你可以执行相同的操作BeanFactoryPostProcessor(尽管你需要强制转换BeanFactory为BeanDefinitionRegistry,这可能会失败)。

2020-04-12
小编典典

这是一个简单的代码:

ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
beanFactory.registerSingleton(bean.getClass().getCanonicalName(), bean);
2020-04-12