通过创建多个ApplicationContexts来使用Spring来管理bean生命周期-这样可以吗?

通过创建多个ApplicationContexts来使用Spring来管理bean生命周期-这样可以吗?,spring,Spring,我以前使用过Spring,但我不是专家,以前只在标准web开发中使用它 目前,我正在从事一个项目,其中Spring的使用方式非常不同。它是一个独立的Swing应用程序,有许多显示器,用户可以通过工具栏在显示器之间切换。当显示更改时,需要销毁所有组件(垃圾收集) 目前,这是通过将单独的ApplicationContexts与每个显示器关联来实现的。因此,当显示发生更改时,我们的想法是销毁与显示相关联的AppCtx,然后创建一个新的应用程序上下文(从不同的XML文件)以在新显示中加载组件 这是使用S

我以前使用过Spring,但我不是专家,以前只在标准web开发中使用它

目前,我正在从事一个项目,其中Spring的使用方式非常不同。它是一个独立的Swing应用程序,有许多显示器,用户可以通过工具栏在显示器之间切换。当显示更改时,需要销毁所有组件(垃圾收集)

目前,这是通过将单独的ApplicationContexts与每个显示器关联来实现的。因此,当显示发生更改时,我们的想法是销毁与显示相关联的AppCtx,然后创建一个新的应用程序上下文(从不同的XML文件)以在新显示中加载组件


这是使用Spring的合适方法吗?我不太了解Spring容器的内部结构以及容器管理bean的方式,因此我无法确定这是否是一件好事。

听起来您应该使用一个

从Spring2.0开始,Spring中的bean作用域机制是可扩展的。这意味着您不仅限于Spring提供的现成bean范围;您可以定义自己的作用域,甚至可以重新定义现有的作用域(尽管最后一个作用域可能被认为是不好的做法-请注意,您不能覆盖内置的单例和原型作用域)

您的方法的问题主要是性能,因为您将在每次屏幕更改时解析/配置/定义/实例化Springbean。我建议您改为使用
screen
(比方说)的自定义作用域,它会为每个作用域返回单独的对象


有关实现的详细信息,请参阅。

谢谢,我刚刚阅读了有关作用域的内容,它们听起来正是我所需要的!