春天 - 正在使用新的不良做法?

时间:2018-04-23 19:50:47

标签: java spring dependency-injection inversion-of-control new-operator

是手动创建对象 ,即使用private final static DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); // ... public static void main(String[] args) { // do exception handling for `parse` Reiziger r1 = new Reiziger("Joost", dateFormat.parse("01-01-1994")); Reiziger r2 = new Reiziger("Hans", null); // ... } 运算符而不是注册new bean并使用依赖注入被视为不良做法?我的意思是,Spring容器必须知道应用程序中的所有对象吗?如果是这样,为什么?

3 个答案:

答案 0 :(得分:3)

您希望Spring为以下类创建bean

  • 您希望/需要在其他bean中注入实例
  • 您需要在自己的实例中注入bean(或依赖项)。
  • 您希望他们从Spring功能中受益(实例化管理,事务管理,代理类Spring赋予权限,例如Repository / Interceptor等等......)

服务,控制器或拦截器就是它们的例子 例如,控制器可能需要注入服务或拦截器 同样,您不希望通过实现每个类的单例模式来处理这些类的实例化。这可能容易出错,需要锅炉板代码 所以你希望所有这些类都是由Spring管理的bean。

但您不希望Spring为以下类创建bean

  • 您不希望/需要在其他bean中注入实例
  • 您不需要在自己的实例中注入bean(或rdependencies)
  • 您不需要他们受益于Spring功能

实体,DTO,价值对象就是它们的例子。

例如,实体永远不需要作为依赖项注入到另一个实体或服务中,因为实体不是在容器启动时创建的,而是通常在方法内部创建,并且范围仅限于方法生命周期。 /> 除了你不需要Spring来创建寿命是一种方法的实例。 new运算符可以很好地完成这项工作 因此将它们定义为bean实例是没有意义的,甚至反直觉。

答案 1 :(得分:0)

对象创建不应该依赖于类。当你使用new运算符时,它会创建一个依赖,这对你来说很痛苦,你必须担心这个对象的创建当你在构造函数中进行更改时。 对象全球化帮助的地方。自动装配对象可以完全减少依赖关系。如果你不使用这个功能,无论如何你都会了解自己。

答案 2 :(得分:0)

Spring实现依赖注入模式。你应该在spring的容器中注入将在其他类中使用的bean作为依赖以便能够工作。通常会注入实现接口的类,以便在更改实现时,使用该接口的类不知道更改。

我建议你阅读关于Martin Fowler依赖注入的post

相关问题