我正在使用Spring3.1
我的应用程序将有一种bean-manager。
该经理将能够检索请求,并且在每个请求中我需要动态创建新的bean实例,该实例将使用它自己的唯一参数启动。
将通过请求方法检索params。
这个bean必须是活动的并且异步工作。 (例如,它将监听jms调用,按需执行方法等等。)
此外,我想要选择销毁豆类。
这些bean可能类似于会话,因此当用户注销时,我将销毁这些bean。
我知道我必须创建某种bean-list或bean池并使用某种管理器来管理它。
如何动态创建这些bean并让它们保持活着直到我销毁它们?
任何想法我怎么能实现这样的东西?
答案 0 :(得分:3)
从这个意义上说,最简单的方法是创建一个StaticApplicationContext
设置其父上下文作为公共上下文(持有您想要共享所有bean的bean)。这可以通过以下方式达到:
StaticApplicationContext innerContext = new StaticApplicationContext(parentContext);
在此之后,您可能希望声明要在Spring上实例化的bean,以便附加所有AOP内容,自动装配和其他功能,因此您需要执行以下操作:
innerContext.registerSingleton("beanName", beanClass);
注册后,您可以实例化bean:
innerContext.getBean(beanClass);
当然有spring的范围Session
的实现,因此我建议你检查WebApplicationContext
文档,方法loadParentContext
,你基本上将ServletContext作为参数传递。
答案 1 :(得分:0)
我在运行时动态创建bean并在应用程序的任何地方使用它时也遇到了很多麻烦。
这是完整的代码
static ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] { "Spring-Question.xml" });
static StaticApplicationContext innerContext = new StaticApplicationContext(appContext);
创建bean并设置值,例如
innerContext.registerSingleton("beanName", Test.class);
Test test = innerContext.getBean(Test.class);
test.setA(3);
test.setB(4);
然后在应用程序的任何地方重新使用bean ....
Test test = innerContext.getBean(Test.class);
System.out.println(test.setB(4));