[英]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.