Spring: доступ к ресурсу bean из другого bean

У меня есть два beans:

ConfigurationManager:

public class ConfigurationManager
{
    private Configuration configuration;

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

    // Getters and setters
}

DataCenter:

public class DataCenter
{
    private Configuration configuration;

    ...

    // Getters and setters
}

Я хотел бы получить поле configuration ConfigurationManager из моего DataCenter 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" ref="configurationManager."/> -->
</bean>

Может кто-нибудь, пожалуйста, покажите мне, как это сделать? Спасибо заранее!

Ответ 1

Вы можете использовать Spring Язык выражений, чтобы ссылаться на другие свойства 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>

Аналогичным образом вы можете использовать @Value аннотацию в методах @Bean или используйте его в методах @Autowired.

Ответ 2

попробуйте это

<bean id="dataCenter" class="com.foo.DataCenter">
    <property name="configuration" value="#{configurationManager.configuration}"/>
</bean>