【问题标题】:Role of new keyword in Spring FrameworkSpring Framework中new关键字的作用
【发布时间】:2023-03-24 14:50:01
【问题描述】:

在 Spring Framework 中,beans are the preferred way of creating objects 似乎用于业务逻辑。

[依赖注入]是一个过程,对象定义它们的依赖关系,即它们工作的其他对象,仅通过构造函数参数、工厂方法的参数或在对象实例构造后设置的属性或从工厂方法返回。然后容器在创建 bean 时注入这些依赖项。这个过程与 bean 本身通过使用类的直接构造或诸如服务定位器模式之类的机制来控制其依赖项的实例化或位置基本上是相反的,因此称为控制反转 (IoC)。

所以从我的简单理解来看,区别是这样的:

// Plain ol' Java
Foo f = new Foo();

// Using beans in Spring Framework
Foo f = FooFactory.get();

说作为一项规则,在@Configuration 类和@Bean 定义之外的方法中,开发人员应该只使用bean 获取对象,这是否过于简单化了?具体来说,在我想要一个新对象的情况下,我应该注入一个原型bean而不是直接使用new关键字吗?

我不确定是否遵循 Spring 约定的代码示例如下所示。

// Construct a new object that will be created in the database
RecordDto record = new RecordDto();

// Or should I be using some bean factory?
RecordDto record = RecordDtoFactory.get();

【问题讨论】:

  • "(...) 似乎 bean 是创建用于业务逻辑的对象的首选方式" - 需要引用。
  • @kryger 我在 Spring Framework 文档的“Spring IoC 容器和 bean 简介”部分的第一段中添加了引用。
  • 是的,但您的问题是关于 business/domain objects 这不是 Spring 文档所说的。我个人从未见过以这种方式创建和管理域对象的项目,这就是为什么我发现“创建对象的首选方式”只是一种观点。

标签: java spring inversion-of-control


【解决方案1】:

请阅读心爱的马丁福勒的this Article。 我认为当您的应用程序中的某些组件依赖于其他组件以完成某些功能时,IOC 概念很有用。 IoC 容器将负责管理软件组件的创建和生命周期,并将它们注入依赖组件中,而不是手动访问这些组件实例。

例如,当某些 Service 需要一个 DAO 实例时,它会从容器中获取它而不是创建它。

但在 DTO 的情况下,它们只会保存数据,这不是真正的依赖关系。所以我认为在这种情况下使用 "new" 更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2015-10-12
    • 1970-01-01
    • 2011-01-09
    • 2011-08-17
    • 2012-03-01
    相关资源
    最近更新 更多