gpt4 book ai didi

java - 使用 getBean 而不是 Spring 中的方法注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:27:33 26 4
gpt4 key购买 nike

我有一个有多个屏幕的应用程序,每个屏幕都是通过一个按钮选择的。每个屏幕都包含相当重量级的组件,因此只有激活屏幕在内存中很重要 - 所有其他屏幕都应该可用于垃圾回收。

该应用程序使用 Spring 作为胶水,目前它使用 getBean() 切换屏幕:

//event handler for a specific button
public void actionPerformed(Event e) {
setScreen( (Screen) applicationContext.getBean("screen1"));
}

“screen1”是一个原型(prototype) bean,因此当按下按钮时会创建一个新的屏幕实例。此外,setScreen() 是唯一在应用程序中维护对 Screen 的引用的地方,因此以前 Activity 的屏幕将可用于垃圾收集。我还没有对此进行测试,但我希望它能正常工作 - 这里没有火箭科学!

问题是 - 在阅读之后 this page关于为什么 getBean() 被认为是坏的 - 我想知道是否有更惯用的方法来实现相同的结果,同时消除对 getBean() 的依赖。

我研究了方法注入(inject),在我看来它引入了复杂性但收效甚微。这是另一个需要学习的概念,更神奇,添加对 CGLIB 的依赖等。如果我真的想去除对 Spring 的依赖,我可以引入一个暴露 getBean() 方法的接口(interface)。

getBean() 和方法注入(inject)是我的唯一选择,还是我错过了什么?

如果是这样,getBean() 真的那么糟糕吗?

最佳答案

Setter 注入(inject)、属性注入(inject)或构造函数注入(inject)都创建了一个松散耦合的应用程序,它更容易通过模拟进行测试。它还可以防止您的任何类直接依赖于 Spring(或其他 IoC 容器)类。当您不必手动调用 getBean() 时,它最终只是一个更简洁的整体解决方案。

我认为您应该熟悉配置依赖项的概念。 “魔法”根本不是真正的魔法,只是您在使用它时会感到舒服的东西。

关于java - 使用 getBean 而不是 Spring 中的方法注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com