繁体   English   中英

Spring bean必须代表一个唯一的对象吗?

[英]Must a Spring bean represent a unique object?

Spring bean可以引用另一个bean吗? 它似乎不起作用:

<bean id="player1" class="some.package.Player" />
<bean id="player2" ref="player1" />

如果可能的话,有用吗? 到目前为止,我一直认为每个bean必须代表一个唯一的对象,但是我想到了一个主意:如果我有一个名为Sun的Singleton类,例如带有“ public static Sun getInstance()”方法的Sun,我将制作两个bean是同一个对象?

<bean id="sun1" class="some.package.Sun" factory-method="getInstance" />
<bean id="sun2" class="some.package.Sun" factory-method="getInstance" />

看下面

<bean id="player1" class="some.package.Player" />

<bean id="player2" ref="player1" />

我认为您想用两个或多个名称引用同一个bean。 如果是这样,则可以将逗号分隔的列表或ID用作(别名概念)

<bean id="player1, player2" class="some.package.Player" />

现在,您可以使用player1或player2引用bean。

同样的,

<bean id="sun1" class="some.package.Sun" factory-method="getInstance" /> <bean id="sun2" class="some.package.Sun" factory-method="getInstance" />

可以替换为

<bean id="sun1, sun2" class="some.package.Sun" factory-method="getInstance" />

这使您可以使用两个不同的id引用相同的bean。

要了解别名何时有用,请参阅https://vladmihalcea.com/why-i-like-spring-bean-aliasing/

Bean别名使我们可以覆盖已配置的Bean,并用不同的对象定义替换它们。 当bean定义是从我们无法控制的外部资源继承时,这非常有用。

Bean通常是单调的,因此每个上下文代表一个对象。 Java中的标准单例设计模式为每个类加载器创建一个对象。 我认为在您的情况下,您将重新创建一个对象两次,一次是使用Spring Bean,一次是使用自己的类加载器执行的实现。 因此,当您通过.getInstance().hashCode()比较它们的哈希码时,两个太阳将是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM