use*_*714 52 java spring web-applications dynamic
由于插件架构,我正在尝试以编程方式将bean添加到我的webapp中.我有一个通过@Component
注释创建的Spring bean ,我正在实现该ApplicationContextAware
接口.
我的覆盖功能如下所示:
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我无法弄清楚如何将bean添加到setApplicationContext的applicationContext对象.任何人都可以告诉我我是怎么做错的方式吗?
好的,这就是我最终得到的解决方案:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
Run Code Online (Sandbox Code Playgroud)
axt*_*avt 41
在Spring 3.0中,您可以创建bean实现BeanDefinitionRegistryPostProcessor
并通过添加新bean BeanDefinitionRegistry
.
在以前的Spring版本中,你可以做同样的事情BeanFactoryPostProcessor
(虽然你需要BeanFactory
转换BeanDefinitionRegistry
,可能会失败).
snd*_*yuk 40
这是一个简单的代码:
ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
beanFactory.registerSingleton(bean.getClass().getCanonicalName(), bean);
Run Code Online (Sandbox Code Playgroud)
为什么你需要它的类型GenericWebApplicationContext
?
我认为你可以使用任何ApplicationContext类型.
通常你会使用init方法(除了你的setter方法):
@PostConstruct
public void init(){
AutowireCapableBeanFactory bf = this.applicationContext
.getAutowireCapableBeanFactory();
// wire stuff here
}
Run Code Online (Sandbox Code Playgroud)
你可以使用其中任何一个来连接bean
AutowireCapableBeanFactory.autowire(Class, int mode, boolean dependencyInject)
要么
AutowireCapableBeanFactory.initializeBean(Object existingbean, String beanName)
归档时间: |
|
查看次数: |
95742 次 |
最近记录: |