首页 > 解决方案 > 为 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"
}

标签: javaspring-boot

解决方案


显然,Person不能是单例,因为您可以根据每个请求创建这些对象,理解。现在,如果你绝对需要它,你可以在 Spring 中创建一个具有原型作用域的 bean 作为 Person。

将 PersonDTO 转换为 Person 的服务将是一个单例,正如评论中已经说明的那样,但它的“convert”方法可以获得原型。

有许多技术方法可以将原型注入单例。看看这里

但是,我想强调的是,与单例不同,原型范围的 bean 的实例不存储在应用程序上下文中。否则,应用程序上下文会爆炸,保留太多引用(我的意思是内存不足错误)

因此,您将基本上获得以下收益:

  • 春天会做一个“新”不是你
  • 如果已定义,则可以调用 Post Construct(但对于 pre-destroy 方法则不然)
  • 如果你在这个类中有依赖,spring 会为你注入它们。在像您这样的对象转换的情况下,情况似乎并非如此。

那么此时使用 Spring 有什么意义呢?

就个人而言(这只是我的意见/建议)倾向于在 Spring 之外处理各种转换者、构建者等,在 Spring 中保留服务/控制器(长期存在的对象)。


推荐阅读