2

我正在使用 Spring3.1

我的应用程序将有一种 bean-manager。

该管理器将能够检索请求,并且在每个请求上我需要动态创建新的 bean 实例,该实例将使用它自己的唯一参数启动。

参数将通过 request 方法检索。

这个 bean 必须是活动的并且异步工作。(例如它会监听 jms 调用,按需执行方法等等..)

此外,我还希望可以选择销毁 bean。

这些 bean 可能类似于会话,因此当用户注销时,我将销毁这些 bean。

我知道我必须创建某种 bean 列表或 bean 池并使用某种管理器对其进行管理。

如何动态创建这些 bean 并让它们保持活跃,直到我销毁它们?

知道我怎么能实现这样的事情吗?

4

2 回答 2

3

从这个意义上说,最简单的方法是创建一个StaticApplicationContext将其父上下文设置为公共上下文(持有您想要共享的 bean 的那个)。您可以通过执行以下操作来达到此目的:

StaticApplicationContext innerContext = new StaticApplicationContext(parentContext);

在此之后,您可能想要声明要在 Spring 上实例化的 bean,以便附加所有 AOP 内容、自动装配和其他功能,因此您需要执行以下操作:

innerContext.registerSingleton("beanName", beanClass);

注册后,您可以像这样实例化 bean:

innerContext.getBean(beanClass);

当然有Sessionspring 范围的实现,因此我建议您检查WebApplicationContext文档,loadParentContext您基本上将 ServletContext 作为参数传递的方法。

于 2012-07-08T14:40:31.257 回答
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));
于 2014-05-13T08:27:15.807 回答