Spring:从另一个bean访问bean属性

car*_*ing 15 java spring

我有两个豆子:

ConfigurationManager中:

public class ConfigurationManager
{
    private Configuration configuration;

    public void init() { ... } // Loads a configuration

    // Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

数据中心:

public class DataCenter
{
    private Configuration configuration;

    ...

    // Getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我想configuration从我的DataCenter bean中获取ConfigurationManager 的字段,我不太清楚语法是什么.

这是我的上下文文件:

<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>
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我该怎么做?提前致谢!

Sot*_*lis 17

您可以使用Spring Expression Language按名称引用其他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>
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你可以使用

<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>
Run Code Online (Sandbox Code Playgroud)

以类似的方式,您可以@Value@Bean方法中使用注释方法中使用它@Autowired.


Evg*_*eev 5

尝试这个

<bean id="dataCenter" class="com.foo.DataCenter">
    <property name="configuration" value="#{configurationManager.configuration}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)