【发布时间】:2010-11-12 08:33:07
【问题描述】:
我有一个有多个屏幕的应用程序,每个屏幕都是通过一个按钮选择的。每个屏幕都包含相当重量级的组件,因此只有激活屏幕在内存中很重要——所有其他屏幕都应该可用于垃圾回收。
应用程序使用 Spring 作为粘合,目前它使用 getBean() 切换屏幕:
//event handler for a specific button
public void actionPerformed(Event e) {
setScreen( (Screen) applicationContext.getBean("screen1"));
}
"screen1" 是一个原型 bean,因此当按下按钮时会创建一个新的屏幕实例。此外,setScreen() 是应用程序中唯一维护对 Screen 的引用的地方,因此以前活动的屏幕将可用于垃圾收集。我尚未对此进行测试,但我希望它会正常工作 - 这里没有火箭科学!
问题是 - 在阅读 this page 关于为什么 getBean() 被认为不好之后 - 我想知道是否有更惯用的方法来获得相同的结果,同时消除对 getBean() 的依赖。
我已经研究过方法注入,在我看来它引入了复杂性而没有什么好处。这是另一个需要学习的概念,更神奇,增加对CGLIB的依赖等等。如果我真的想去除对Spring的依赖,我可以只引入一个暴露getBean()方法的接口。
在我的情况下,getBean() 和方法注入是唯一的选择还是我错过了什么?
如果是这样,getBean() 真的那么糟糕吗?
【问题讨论】: