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

2022-08-31 15:20:13

由于插件体系结构,我正在尝试以编程方式将Bean添加到我的Web应用程序中。我有一个通过注释创建的Spring bean,我正在实现该接口。@ComponentApplicationContextAware

我的覆盖函数如下所示:

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

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

基本上,我无法弄清楚如何将bean添加到为setApplicationContext给出的应用程序Context对象中。谁能告诉我我是如何以错误的方式做到这一点的?

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

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

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

答案 1

下面是一个简单的代码:

ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
beanFactory.registerSingleton(bean.getClass().getCanonicalName(), bean);

答案 2

在Spring 3.0中,您可以使您的Bean实现BeanDefinitionRegistryPostProcessor并通过添加新的bean。BeanDefinitionRegistry

在以前版本的Spring中,你可以做同样的事情(尽管你需要强制转换为 ,这可能会失败)。BeanFactoryPostProcessorBeanFactoryBeanDefinitionRegistry


推荐