我正在浏览spring文档,并发现了以下声明 -
然后,您可以使用getBean来检索Bean的实例。 ApplicationContext接口还有一些其他方法 检索bean,但理想情况下,您的应用程序代码永远不应该使用 他们。 确实,您的应用程序代码应该没有调用 所有的getBean()方法,因此不依赖于Spring API 所有。例如,Spring与Web框架的集成提供了 依赖注入各种Web框架组件,如 控制器和JSF管理的bean,允许您声明一个 通过元数据(例如自动装配)对特定bean的依赖 注解)。
参考 - https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html
在我的应用程序中,我收到一些参数给我的客户端方法,基于哪个,我注入了适当的接口实现。
我这样做的方法是,在连接这些参数后搜索bean id。
例如 - 如果我收到type=C
,subType=D
,我通过调用getBean(beanId)获取带有bean id=typeCsubTypeD
的bean。
即,我的依赖关系是在运行时确定的。
我已经完成了Why is Spring's ApplicationContext.getBean considered bad?
但是,这并不包括我的用例(正如该问题中的评论所述)。
答案 0 :(得分:2)
一般来说,我的建议是避免狂热的狂热分子。
如今,控制反转非常大肆宣传(作为SOLID设计原则的一部分),所以如果有人使用违反该原则的任何内容,人们会盲目地抨击它并说你应该避免使用它。然而,真正的答案是在软件设计方面没有普遍规律。如果你有充分的理由不在你的应用程序中使用控制反转,那么使用getBean()
你当然可以。原则通常意味着意味着“不要在静态初始化上下文中使用getBean()
,而是可以使用控制反转”。
例如,我们有一个应用程序使用Spring作为“bean脚本语言”,允许非开发人员在不使用完整的DSL的情况下定义可配置的Java bean。如果您在这方面使用Spring,那么就没有合理的方法可以避免使用getBean()
。