Java Spring:从另一个bean访问bean属性
我有两颗豆子: 配置管理器:Java Spring:从另一个bean访问bean属性,java,spring,Java,Spring,我有两颗豆子: 配置管理器: public class ConfigurationManager { private Configuration configuration; public void init() { ... } // Loads a configuration // Getters and setters } 数据中心: public class DataCenter { private Configuration configuratio
public class ConfigurationManager
{
private Configuration configuration;
public void init() { ... } // Loads a configuration
// Getters and setters
}
数据中心:
public class DataCenter
{
private Configuration configuration;
...
// Getters and setters
}
我想从我的数据中心bean中获取ConfigurationManager的configuration
字段,但我不太确定语法是什么
这是我的上下文文件:
<bean id="configurationManager"
class="com.foo.ConfigurationManager"
init-method="init">
<property name="configurationFile" value="etc/configuration.xml"/>
</bean>
<bean id="dataCenter"
class="com.foo.DataCenter">
<!-- <property name="storages" ref="configurationManager."/> -->
</bean>
有人能告诉我怎么做吗?提前谢谢 试试这个
<bean id="dataCenter" class="com.foo.DataCenter">
<property name="configuration" value="#{configurationManager.configuration}"/>
</bean>
您可以使用来按名称引用其他bean属性。以下是文档中给出的示例
<bean id="numberGuess" class="org.spring.samples.NumberGuess">
<property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>
<!-- other properties -->
</bean>
<bean id="shapeGuess" class="org.spring.samples.ShapeGuess">
<property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>
<!-- other properties -->
</bean>
在你的情况下,你可以使用
<bean id="configurationManager"
class="com.foo.ConfigurationManager"
init-method="init">
<property name="configurationFile" value="etc/configuration.xml"/>
</bean>
<bean id="dataCenter"
class="com.foo.DataCenter">
<property name="storages" value="#{configurationManager.configuration}"/>
</bean>
同样,您可以使用或可能有用的:@ChrisHayes,这确实有效,谢谢!但我想知道,是否有一种更整洁的方法来减少锅炉板的配置,或者这是唯一/正确的方法…?谢谢你的评论。恐怕这个例子不适用于自定义对象。实际上我是先试过的。例如,如果我的字段是
String
,它会工作,但它是一个名为Configuration
的类。我该怎么做呢?(或者可能我做错了)…@carlspring它也适用于自定义类,假设您有合适的访问器。如果愿意,还可以使用构造函数参数并指定参数的类型。@carlspring老实说,我实际上会有一个配置bean,它可能会在构造函数中加载自身并传递对该bean的引用,而不是按照您的要求这样做。@Sotiros,是否有一种方法可以定义一个实际上是已经定义的bean的字段/属性的bean?我的意思是——如果我有beanA
,并且想定义一个新bean(beanB
),它是beanA.foo
?@carlspring的参考,如果我正确理解你的建议,那将违背IoC和依赖注入的目的。与创建beanC
并将其注入beanA.f
不同,您建议创建beanA
来创建beanA.f
,然后从f
生成bean。无论如何,不,你不能用Spring来做这个。谢谢!你的两个答案都是正确的。我选择索蒂罗斯的答案,因为它更详细一些。