Spring bean可以作为另一个bean的引用吗?它似乎不起作用:
<bean id="player1" class="some.package.Player" />
<bean id="player2" ref="player1" />
如果可以的话,它有用吗?到目前为止,我认为每个bean都必须代表一个独特的对象,但是我的脑子里有一些想法:如果我有一个Singleton类,例如Sun使用“public static Sun getInstance()”方法,我会让两个bean成为同一个对象吗?
<bean id="sun1" class="some.package.Sun" factory-method="getInstance" />
<bean id="sun2" class="some.package.Sun" factory-method="getInstance" />
答案 0 :(得分:2)
看下面的
<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定义从外部继承时很有用 资源,这是我们无法控制的。
答案 1 :(得分:0)
Bean通常是单一的,因此它们代表一个对象每个上下文。 java中的标准单例设计模式为每个类加载器创建一个对象 。我认为在你的情况下你将重新创建一个对象两次,一次使用Spring bean,一次使用自己的类加载器执行实现。因此,当您通过.getInstance().hashCode()
比较哈希码时,两个太阳都是相同的。