加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 将动态bean添加到spring web context

发布时间:2020-12-15 01:30:56 所属栏目:大数据 来源:网络整理
导读:我需要能够将新bean添加到spring web上下文(在任何范围内),以便在编译时可能会在类路径中定义这些类. 例如,我可以动态创建一些这样的类,然后为这个类注册一个单例或会话bean. 我读了一些关于BeanFactoryPostProcessor的内容,但不确定它是否适用于Web上下文,

我需要能够将新bean添加到spring web上下文(在任何范围内),以便在编译时可能会在类路径中定义这些类.

例如,我可以动态创建一些这样的类,然后为这个类注册一个单例或会话bean.

我读了一些关于BeanFactoryPostProcessor的内容,但不确定它是否适用于Web上下文,如果我理解正确它只能在实际加载bean实例之前工作,而不是之后,或者我错了?

我无法在AnnotationConfigWebApplicationContext中找到有关如何执行此操作的信息,至少在我的测试中,我创建的所有bean都没有注入到其他实例中,即使它们是我只看到注册Singleton的方法bean但不适用于其他范围:

ctx.getBeanFactory().registerSingleton("dummy",dummy);

P.D.

我发现了这个问题:Dynamic creation of beans in Spring但是当我尝试将任何bean,bean定义或bean定义构建器添加到这样的web上下文时,bean不会被加载:

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.setServletContext(servletContext);
ctx.refresh();
//
log.trace("Registering first test bean");
Test test = new Test();
test.setDummy("x1");
ctx.getBeanFactory().registerSingleton("myTestBean1",test);        

log.trace("Registering second test bean");
BeanDefinition testDef = new RootBeanDefinition(Test.class);        
testDef.setScope(BeanDefinition.SCOPE_SINGLETON);        
ctx.getBeanFactory().registerSingleton("myTestBean2",testDef);

Test dummy1 = (Test)ctx.getBean("myTestBean1");
Object dummy2 = ctx.getBean("myTestBean2");

log.trace("beans: 1: {}; 2: {}",dummy1,dummy2); //<--this works,but...
ctx.refresh();

ctx.register(MyConfig.class); //configuring other beans

…当我从MyConfig.class中配置的另一个bean执行此操作或使用@Component注释时(它甚至可能是另一个动态组件):

@Autowire Test myTestBean1;
//Or this:
Object a = this.ctx.getBean("myTestBean1"); //Or myTestBean2

它会抛出NoSuchBeanDefinitionException

请帮我!!我一直在四处寻找并没有找到任何有用的信息,或者我可能但是我无法在如此短的时间内测试我在网上找到的所有东西而且弹簧文档似乎只对正常情况和xml配置非常好,而不是对于我正在尝试做的这些疯狂的事情而不是编程配置.

最佳答案
你所追求的是无法完成的,抱歉.最初创建bean时会发生自动装配.在您的情况下,您希望在将bean添加到工厂之前连接它,这当然不起作用 – Spring不会进行时间旅行.

我认为你所追求的是工厂模式.在Spring中,您可以通过实现FactoryBean将bean的实例化推迟到您创建的工厂.在此处阅读更多内容:

> http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-extension-factorybean
> http://blog.springsource.org/2011/08/09/whats-a-factorybean/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读