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

k13*_*13i 5 java spring dependency-injection inversion-of-control new-operator

手动创建对象,即使用new运算符而不是注册Springbean并使用依赖注入被认为是不好的做法?我的意思是,Spring IoC容器必须知道应用程序中的所有对象吗?如果是这样,为什么?

dav*_*xxx 7

您希望 Spring 为以下类创建 bean

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

服务、控制器或拦截器就是其中的例子。
例如,控制器可能需要注入服务或拦截器。
以及您不想通过为每个类实现自己的单例模式来处理这些类的实例化。这可能容易出错并且需要样板代码。
所以您希望所有这些类都是由 Spring 管理的 bean。

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

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

实体、DTO、值对象就是其中的例子。

例如,实体永远不需要作为依赖项注入到另一个实体或服务中,因为实体不是在容器启动时创建的,而是通常在方法内部创建的,并且范围仅限于方法的生命周期。
以及您不需要 Spring 来创建生命周期是一种方法的实例。该new运营商做得很好的工作。
因此,将它们定义为 bean 实例是没有意义的,而且看起来甚至违反直觉。