由于插件体系结构的原因,我正在尝试以编程方式将bean添加到我的webapp中。我有一个 Spring Bean 通过 @Component
注解,我正在实现 ApplicationContextAware
接口。
我的覆盖函数如下所示:
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
基本上,我不知道如何将bean添加到给定给setapplicationcontext的applicationcontext对象中。有人能告诉我我是怎么做的吗?
好吧,这就是我最终的解决方案:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
5条答案
按热度按时间gr8qqesn1#
在Spring3.0中,您可以使bean实现
BeanDefinitionRegistryPostProcessor
并通过BeanDefinitionRegistry
.在以前版本的spring中,您可以在
BeanFactoryPostProcessor
(尽管你需要BeanFactory
至BeanDefinitionRegistry
,可能会失败)。bvuwiixz2#
下面是一个简单的代码:
ergxz8rk3#
你为什么要它是那种类型的
GenericWebApplicationContext
?我认为您可能可以使用任何applicationcontext类型。
通常使用init方法(除了setter方法之外):
你可以用这两种方法
AutowireCapableBeanFactory.autowire(Class, int mode, boolean dependencyInject)
或AutowireCapableBeanFactory.initializeBean(Object existingbean, String beanName)
9cbw7uwe4#
事实上
AnnotationConfigApplicationContext
派生自AbstractApplicationContext
,其中有空postProcessBeanFactory
用于重写的方法要利用这一点,请创建
AnnotationConfigApplicationContextProvider
可能看起来像下面的类(为Vertx
例如,您可以使用MyClass
取而代之的是。。。创建时
ApplicationContext
您可以使用ohtdti5x5#
首先初始化属性值
添加到bean列表