java - 为 Spring Boot 最佳实践创建多个对象
问题描述
我正在使用 spring boot。请在我的场景中建议最佳实践。
我有带参数的人员类:
姓名、地址、性别、公司工作、年龄、职业等。
我将从另一个系统接收这些参数作为 personDTO 对象,该对象将作为发布请求进入正文
所以我正在编写一个创建人 api。在这里我不能使用spring bean,因为它是单例的,一次可以有多个请求。(获取/发布参考下面的注释3)
所以创建api函数将在func下面调用。 请建议通过利用 spring boot 功能而不是使用 new Person 创建多个对象的最佳方法
注意-:1)我在数据库中保存人员类。
注意-:2)我在 body 参数中使用 personDto 对象,因为相同的 dto 对象用于在项目中创建其他类,这些类将为其他类提供额外的参数。所以不要专注于 personDto 类。
注意3-:我不能使用单例,因为可以说有人正在使用get api,然后因为它是单例的,所以它会与它返回错误的参数相矛盾。因此使用新的。
void createPerson(personDto pDto)
{
Person p = new Person();
p.setName(pDto.getName());
P.setAge(pDto.getAge());
p.setSex(pDto.getSex());
.
"like this and opening transaction session to rollback if object is not
created"
}
解决方案
显然,Person
不能是单例,因为您可以根据每个请求创建这些对象,理解。现在,如果你绝对需要它,你可以在 Spring 中创建一个具有原型作用域的 bean 作为 Person。
将 PersonDTO 转换为 Person 的服务将是一个单例,正如评论中已经说明的那样,但它的“convert”方法可以获得原型。
有许多技术方法可以将原型注入单例。看看这里
但是,我想强调的是,与单例不同,原型范围的 bean 的实例不存储在应用程序上下文中。否则,应用程序上下文会爆炸,保留太多引用(我的意思是内存不足错误)
因此,您将基本上获得以下收益:
- 春天会做一个“新”不是你
- 如果已定义,则可以调用 Post Construct(但对于 pre-destroy 方法则不然)
- 如果你在这个类中有依赖,spring 会为你注入它们。在像您这样的对象转换的情况下,情况似乎并非如此。
那么此时使用 Spring 有什么意义呢?
就个人而言(这只是我的意见/建议)倾向于在 Spring 之外处理各种转换者、构建者等,在 Spring 中保留服务/控制器(长期存在的对象)。
推荐阅读
- python-3.x - RobotFramework:与 FOR 循环连接
- javascript - 随机报价机,API 不会返回新报价
- xamarin.android - 从远程 API 填充 AutoCompleteTextView
- java - 从给定的 1 和 0 字符串中获取一个字节
- javascript - 视图和 MVC 控制器模型未更新
- bash - 有什么方法可以告诉 .profile.bashrc 该脚本已经在运行?
- c# - 如何在结果中找不到键时使用 PropertyValidationErrors 在 Linq 中查找错误
- reactjs - SetState 不重新渲染和画廊混合
- python - Pandas:如何按组对变量求和?
- c - 打印在某个文件位置从二进制文件读取的字节 C