春季 - 正在使用新的不良练习



是通过手动创建对象,即使用new操作员而不是注册Spring BEAN并使用依赖项注入被认为不良练习?我的意思是,Spring IoC容器是否必须了解应用程序中的所有对象?如果是这样,为什么?

您要为spring创建bean 的类:

  • 您需要/需要在其他bean中注入实例
  • 您需要在自己的实例中注入豆(或依赖项(。
  • 您希望他们从春季功能中受益(实例化管理,交易管理,代理类,弹性弹性,例如存储库/拦截器等等。

服务,控制器或拦截器是它们的示例。
例如,控制器可能需要注入服务或拦截器。
除了您不想通过为每个类别实现单身模式来处理这些类的实例化。可能容易出错并且需要锅炉板代码。
因此,您希望所有这些类都是春季管理的豆子。

,但您不想为

的类创建bean
  • 您不需要/需要在其他bean中注入实例
  • 您不需要在自己的实例中注入豆(或rdepentencies(
  • 您不需要他们从春季功能中受益

实体,dto,值对象是它们的示例。

例如,一个实体永远不需要注入另一个实体或服务中的依赖项,因为不是在容器启动时创建实体,而是在方法内创建的,并且具有限于方法寿命的范围。<<br>除了您不需要春季来创建寿命是一种方法的实例。new操作员做得很好。
因此,将它们定义为bean实例没有意义,甚至似乎对抗直觉。

使用新的并不糟糕,您只是赋予IOC容器在引擎盖下使用新的责任。IOC将了解您注册的所有类。当使用框架时,考虑应用程序架构更为重要,因为框架使不良设计与良好设计一样易于实现。

如果您不需要类的多个实现,请使用新的。

如果您认为可能需要在实现之间切换是合理的,请考虑您的应用程序设计并找到合适的注入点,以便重构不会如此。

如果您需要一类的多次实现,请使用工厂或DI框架之类的设计模式。

应用程序的每个角落都需要高度配置。这就是导致过度设计和难以维护代码的原因。

弹簧实现依赖注入模式。您应该在弹簧容器中注入将在其他类中使用的豆类作为依赖性的豆类。通常会注入实现接口的类,以便如果更改实现的实现,则使用该接口的类不知道更改。

我建议您阅读有关Martin Fowler依赖注入的帖子。

最新更新