栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Spring的ApplicationContext.getBean被认为是不好的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Spring的ApplicationContext.getBean被认为是不好的?

我在另一个问题的评论中提到了这一点,但是Inversion of Control的整个思想是让你的类都不知道或不在乎它们如何获取所依赖的对象。这样可以轻松更改你随时使用的给定依赖项的实现类型。它还使类易于测试,因为你可以提供依赖项的模拟实现。最后,它使课程更简单,更专注于其核心职责。

调用

ApplicationContext.getBean()
不是控制反转!尽管更改给定bean名称配置的实现仍然很容易,但该类现在直接依靠Spring来提供该依赖关系,并且无法以其他任何方式获取它。你不能只在测试类中创建自己的模拟实现并将其自己传递给它。这基本上违反了Spring作为依赖项注入容器的目的。

你想在任何地方说:

MyClass myClass = applicationContext.getBean("myClass");

你应该改为声明一个方法:

public void setMyClass(MyClass myClass) {   this.myClass = myClass;}

然后在你的配置中:

<bean id="myClass" >...</bean><bean id="myOtherClass" >   <property name="myClass" ref="myClass"/></bean>

Spring
会自动注入
myClass
myOtherClass

以这种方式声明所有内容,并且从根本上说是:

<bean id="myApplication" >   <property name="myCentralClass" ref="myCentralClass"/>   <property name="myOtherCentralClass" ref="myOtherCentralClass"/></bean>

MyApplication
是最核心的类,至少间接依赖于程序中的所有其他服务。引导时,可以在你的main方法中调用,
applicationContext.getBean("myApplication")
但是你无需getBean()在其他任何地方调用!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号