首页 > 解决方案 > 在春季何时使用新关键字和自动装配关键字

问题描述

我是春天的新手。我很困惑何时使用 autowired 关键字和 new 关键字。在 spring 中使用模型类时,我们使用 new 关键字而不是 Autowired 关键字

标签: springspring-bootspring-mvc

解决方案


new 关键字在堆中为对象分配了新的内存空间。然后构造函数将初始化对象的状态(对象的属性)。

@Autowired 要求 Spring 框架按 type 注入 requests bean

现在,您已经构建了一个具有控制器、服务和 dao 层的应用程序。这些层基本上不保存应用程序/业务数据的状态。它们包装了功能。与 db 对话的业务逻辑/逻辑等。因此,当您想在 dao 层调用 save(entity) 时,从 Service 执行 -> new DAO().save(entity)...... 这是一个每次创建新对象只是为了使用该功能而浪费内存。一种有效的方法是 -> 创建单例服务实例 -> 为整个应用程序创建一个实例,然后将它们注入其他地方以使用该功能。

Spring 为您处理这些。@Service/@REstController/@Component 基本上告诉 Spring 为您创建该类的实例 - 默认范围是 Singleton。无论您提到哪里-> @Autowired,它都会将该bean(按类型)注入到请求的类中,以便您使用该功能。

这基本上是控制反转。我记住这一点的方式是处理创建实例的责任/控制,并将它们注入到你需要的地方,这与你的框架相反。您还可以通过按类型(通常是接口)注入来消除强耦合,并且 spring 会找到接口的 impl 并将其注入您提到@Autowired 的任何地方。如果有多个 impl,您需要命名每个 impl(或默认名称是带有 firstLetter 小写字母的类名 - 请确认一次,因为我记错了)并使用 @Qualified(name) 向 spring 提及您想要的 impl注入。

现在您的模型/实体 -> 这些基本上是 Java bean -> 具有访问这些属性的属性和访问器方法。这些将保存您的应用程序的状态。因此,每次新用户注册时,您都需要一个新的用户对象来传递层以执行一些逻辑,然后保存到数据库。因此,您将使用 new 关键字创建一个新对象。


推荐阅读