gpt4 book ai didi

java - 依赖注入(inject)框架插入Spring单例模式的使用

转载 作者:行者123 更新时间:2023-11-30 01:49:57 24 4
gpt4 key购买 nike

我试图理解这样一个事实:Spring IoC 容器只保存客户端想要注入(inject)的对象的一个​​实例。

我们先定义一下什么是单例

An object with mutable states that can only be reached outside of the stack, meaning it is residing in the method memory area (permanent generation space) of the JVM

如果你在 spring 中用 @Bean 注释一个方法如下图所示:

@Bean
public Student getStudent() {
return new Student();
}

容器将执行此操作并将其存储在容器中,以便它可以注入(inject)到构造函数中,如下所示:

@Autowire
class StudentService() {

public StudentService(Student s) {
this.s = s;
}
}

一切都很好,花花公子。但是,这不是单例模式的另一种形式吗?我的意思是,当然你必须注入(inject)它才能使用它,但是如果我们在学生中存在客户需要的可变状态并导致另一个客户出现意外情况怎么办? bean 中没有可变状态而只有方法是很常见的吗?

谢谢

最佳答案

基本上,您应该仅对无状态 bean 使用 singleton 范围。从 Spring 开始documentation :

[...] you should use the prototype scope for all beans that are stateful,while the singleton scope should be used for stateless beans.

当您遵守此规则时,您所描述的情况将永远不会发生(即共享可变状态)。

所以回答你的问题:

bean 中没有可变状态而只有方法的情况常见吗?

是的,您不应该将状态保存在具有单例范围的 bean 内。

关于java - 依赖注入(inject)框架插入Spring单例模式的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com