为什么在Spring Application

时间:2017-10-20 21:03:17

标签: java spring dependency-injection

我正在浏览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=CsubType=D,我通过调用getBean(beanId)获取带有bean id=typeCsubTypeD的bean。 即,我的依赖关系是在运行时确定的。

我已经完成了Why is Spring's ApplicationContext.getBean considered bad?

但是,这并不包括我的用例(正如该问题中的评论所述)。

1 个答案:

答案 0 :(得分:2)

一般来说,我的建议是避免狂热的狂热分子。

如今,控制反转非常大肆宣传(作为SOLID设计原则的一部分),所以如果有人使用违反该原则的任何内容,人们会盲目地抨击它并说你应该避免使用它。然而,真正的答案是在软件设计方面没有普遍规律。如果你有充分的理由不在你的应用程序中使用控制反转,那么使用getBean()你当然可以。原则通常意味着意味着“不要在静态初始化上下文中使用getBean(),而是可以使用控制反转”。

例如,我们有一个应用程序使用Spring作为“bean脚本语言”,允许非开发人员在不使用完整的DSL的情况下定义可配置的Java bean。如果您在这方面使用Spring,那么就没有合理的方法可以避免使用getBean()