spring - 在春季何时使用新关键字和自动装配关键字
问题描述
我是春天的新手。我很困惑何时使用 autowired 关键字和 new 关键字。在 spring 中使用模型类时,我们使用 new 关键字而不是 Autowired 关键字
解决方案
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 关键字创建一个新对象。
推荐阅读
- javascript - 闭包如何帮助函数了解前一个函数调用的私有变量
- django - 表单集提交后无法推进 Django 分页器
- c# - Unity:如何将json字符串反序列化为类?
- mysql - 哪个版本的 MySQL 与 Airflow 1.10 版本兼容?
- javascript - discord.js 随机图像显示不正确
- google-cloud-platform - Deployment Manager 无法更新实例模板 - NO_METHOD_TO_UPDATE_FIELD
- f# - 为什么在 IComparable 和比较方面这两个定义上推断的 F# 类型不同?
- shell - 解析大量文件的有效方法
- c# - 任务WhenAll异常处理
- php - 从 PHP 中的目录和文本文档导入数据