为什么不鼓励在 Spring 中调用 ApplicationContext.getBean()
在 Spring 中调用 ApplicationContext.getBean() 被认为是不好的做法,因为它违反了控制反转的原则( IoC)。
控制和依赖的反转注入
IoC 和依赖注入是 Spring 设计的基础。 IoC 封装了这样一个概念:对象不应该负责创建或定位它们的依赖关系。相反,这些依赖项应该由外部源提供。
依赖注入 (DI) 是 Spring 自动将这些依赖项注入到协作对象中的机制。这允许松散耦合,其中对象不依赖于其依赖项的特定实现。
getBean() 的问题
调用 getBean() 直接违背了这些原则:
-
紧密耦合:调用 getBean() 的对象与 Spring 容器紧密耦合。他们知道并关心如何提供依赖项,这使得它们难以测试和重构。
-
绕过依赖管理:通过使用 getBean(),对象绕过 DI 机制并直接访问 Spring 容器。这可能会导致注入不正确的依赖项或潜在的运行时错误。
-
可测试性降低:依赖 getBean() 的对象无法轻松地进行单独测试。无法注入模拟或存根实现,这使得测试这些对象的行为变得困难。
getBean() 的替代方法
开发人员应使用以下方法,而不是直接调用 getBean()方法:
-
构造函数注入:将依赖项作为参数传递到构造函数。 Spring会自动注入相应的bean。
-
Setter注入:在协作对象中定义setter方法,并使用Spring的; XML配置中的标签或Java中的@Autowired注释来指定依赖关系。
-
字段注入:使用@Autowired注释字段成员,但应谨慎使用,因为它可能会导致可见性问题。
通过遵循这些实践,开发人员可以实现松耦合、简化测试并确保 Spring 的稳健性应用程序。
以上是为什么在 Spring 中调用 `ApplicationContext.getBean()` 被认为是不好的做法?的详细内容。更多信息请关注PHP中文网其他相关文章!