Java 为spring boot最佳实践创建多个对象

Java 为spring boot最佳实践创建多个对象,java,spring-boot,Java,Spring Boot,我正在使用spring boot。请建议我场景中的最佳实践 我有带参数的person类-: 姓名、地址、性别、公司工作、年龄、职业等 这些参数将作为personDTO对象从另一个系统接收,该对象将作为post请求进入正文 因此我正在编写一个createpersonapi。这里我不能使用Springbean,因为它是单例的,一次可以有多个请求。(get/post请参阅下面的注释3) 所以createapi函数将在func下面调用。 请建议通过利用spring启动功能而不是使用新人来创建多个对象的最

我正在使用spring boot。请建议我场景中的最佳实践

我有带参数的person类-:
姓名、地址、性别、公司工作、年龄、职业等

这些参数将作为personDTO对象从另一个系统接收,该对象将作为post请求进入正文

因此我正在编写一个createpersonapi。这里我不能使用Springbean,因为它是单例的,一次可以有多个请求。(get/post请参阅下面的注释3)

所以createapi函数将在func下面调用。 请建议通过利用spring启动功能而不是使用新人来创建多个对象的最佳方法

注意-:1)我正在用db保存person类。
注意-:2)我在body param中使用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中将Person创建为具有原型范围的bean

将PersonDTO转换为Person的服务将是一个单例服务,正如在注释中所述,但其“convert”方法可以获得原型

有许多技术方法可以将原型注入到单例中。看一看

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

因此,您将获得以下基本信息:

  • 春天会做一个“新”而不是你
  • 如果定义了后构造,则可以调用后构造(但对于预破坏方法则不是这样)
  • 如果这个类中有依赖项,spring将为您注入它们。对于像您这样的对象转换,情况似乎并非如此
那么,在这一点上使用Spring有什么意义呢


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

显然,
不可能是一个人,因为您可以根据每个请求创建这些对象,明白吗。 现在,如果您确实需要它,您可以在Spring中将Person创建为具有原型范围的bean

将PersonDTO转换为Person的服务将是一个单例服务,正如在注释中所述,但其“convert”方法可以获得原型

有许多技术方法可以将原型注入到单例中。看一看

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

因此,您将获得以下基本信息:

  • 春天会做一个“新”而不是你
  • 如果定义了后构造,则可以调用后构造(但对于预破坏方法则不是这样)
  • 如果这个类中有依赖项,spring将为您注入它们。对于像您这样的对象转换,情况似乎并非如此
那么,在这一点上使用Spring有什么意义呢


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

我不能使用Springbean,因为它是单例的,一次可以发出多个请求。:这就是你错的地方。单例完全能够同时处理多个请求。它需要线程安全,仅此而已。但控制器通常是无状态的,因此是线程安全的。我不能使用单例,因为假设有人正在使用get api,那么它将与单例相矛盾,它将返回错误的参数。所以使用了新的。我不完全明白你的问题。你到底需要什么样的回答?是否有更好的方法来创建“数据对象”(
Person
)而不是使用
newperson(…)
,利用spring boot特性而不是使用new Personi来创建多个对象的最佳方法不能使用singleton,因为假设有人正在使用get api,那么由于它是singleton,它将矛盾,它将返回错误的参数:不,它不会。每个线程都有自己的堆栈,一个线程中的一个方法执行所使用的局部变量将与另一个线程中的同一个方法执行所使用的其他局部变量不同。每个线程都需要创建一个新的person,因此使用
newPerson()
是正确的做法。我不能使用Springbean,因为它是单线程的,并且一次可以发出多个请求。注意:这是错误的地方。单例完全能够同时处理多个请求。它需要线程安全,仅此而已。但控制器通常是无状态的,因此是线程安全的。我不能使用单例,因为假设有人正在使用get api,那么它将与单例相矛盾,它将返回错误的参数。所以使用了新的。我不完全明白你的问题。你到底需要什么样的回答?是否有更好的方法来创建“数据对象”(
Person
)而不是使用
newperson(…)
,利用spring boot特性而不是使用new Personi来创建多个对象的最佳方法不能使用singleton,因为假设有人正在使用get api,那么由于它是singleton,它将矛盾,它将返回错误的参数:不,它不会。每个线程都有它的o