当前位置: 首页 > 知识库问答 >
问题:

春豆的原型是用来做什么的?

田宇
2023-03-14

默认情况下,Spring创建的Bean是singleton。它们是线程安全的,因为它们是无状态的。当我们希望Spring创建有状态Bean时,我们需要为Bean定义使用原型范围。我们需要为他们解决线程安全问题。当原型Bean注入所有无状态Bean时,它们都会受到污染。所以,我无法想象我们可以在哪里使用原型范围。你能给出一些我们可以/需要使用springbean原型的典型场景吗?还有,我们如何避免对其他独生子大豆的有状态污染?

共有2个答案

郏博瀚
2023-03-14

我认为原型范围的bean可以替代用于创建对象的工厂类。不同之处在于,对于原型beans,spring将为您保存一些用于依赖注入的代码,并在适当时自动代理您的对象进行事务处理等。

我自己更喜欢工厂方法。我遇到的原型范围的一个合理场景是一个有状态的对象,不同的已知bean需要它,每个bean都需要自己的副本。在这种情况下,专用的工厂类是多余的,因为我不需要动态创建对象,而只需要在其他bean的实例化期间创建。

夏振国
2023-03-14

使用prototype scope有很多原因,例如,任何时候都可以使用“new”而不是使用singleton。每用户bean、每请求bean、唯一bean的集合等等。毕竟,在任何非平凡的应用程序中,您使用的非单例不是比单例多得多吗?

单例作用域bean之所以不是线程安全的,仅仅是因为它们是单例的——它们必须被编写为线程安全的。它们不会神奇地变成线程安全。bean的范围就是它的范围:它不能使bean适合特定的范围——这取决于开发人员。

 类似资料:
  • 问题内容: 假设两个类为ClassA和ClassB。假设ClassB依赖于ClassA。在配置文件中,如果将ClassA的范围定义为单例,将ClassB的范围定义为Prototype,那么每次创建ClassA的bean实例时,ClassB的实例会发生什么?每次返回ClassA实例时,将返回相同的ClassB实例还是创建新实例? 谢谢!!! 问题答案: 如果ClassB是原型,则始终创建ClassB

  • 也许我会得到很多反对票,但对于我来说,是否使用bean这个事实是如此的困惑。假设这个例子 所以,要注射ICRENCY impl注射剂,我想我可以用两种方法: 方式一:没有春豆 我真的不明白使用Spring的bean会有什么好处。我读了一些东西,但我发现最多的是关于使用DI的好处,而且据我所知,这两种方式都注入了CurrencyProcessor所需的依赖关系,改变的是我创建和使用对象的方式,我错了

  • Java-Spring-骆驼 我想用服务列表发起骆驼路线。 想做下面的事情,但是< code>from方法似乎不是一个生产者。如何定义动态生产者?

  • 问题内容: 该参数对和有什么用?例如,给定以下代码,的作用是什么? 问题答案: 该属性指定从模型回到模型的反向关系的名称。 如果不指定,Django会自动使用带有后缀的型号的名称创建一个,例如。 如果确实在模型上指定,则仍然可以使用,但是User.maps.语法显然更简洁,更简洁。因此,例如,如果你有一个用户对象,则可以用来获取Map模型中与关联的所有实例。 该Django文档有更多的细节。

  • 我目前正在读O'reilly的《Java 8 Lambdas》是一本非常好的书。我遇到了这样一个例子。 我有一个 这会产生正确的输出。 我的问题是将reduce方法视为最后一个参数,即二进制运算符 我的问题是这个参数用于哪个?如果我改变 如果我传递NULL,则输出相同,然后返回N.P.E。 for此参数用于什么? 更新 为什么如果我在上运行它,我会收到不同的结果? 第一次运行。 第二次运行 第三次