Весенняя загрузка значения из POJO в контекст приложения - PullRequest
1 голос
/ 09 декабря 2011

Возможно ли каким-либо образом загрузить значение в Spring appcontext.xml из POJO?

Например, у меня есть POJO, что-то вроде,

public class Settings {
    private String appSetting;
    getMethod;
    setMethod;

public class Main {
    @Autowired
    private Settings setting

    @Autowired
    private SomethingElse somethingElse
}

И конечная цель заключается в том, чтобы я хотел somethingElse автоподключение со значением из настройки. Есть ли способ сделать это, так как я считаю, что вы не можете вызывать методы в Spring?

Пример appContext

<bean id="settings" class="com.myCom.settings" />

<bean id="somethingElse" class="com.myCom.somethingElse" />
    <constructor-arg name="something" value="VALUE FROM SETTINGS.GET" />
</bean>

Ответы [ 4 ]

1 голос
/ 09 декабря 2011

Вы можете зарегистрировать компонент Settings в контексте приложения, а затем создать третий класс, который является фабрикой для генерации экземпляра класса SomethingElse.Затем вы можете подключить компонент Settings к фабрике, чтобы он мог получить необходимые значения при создании экземпляра класса SomethingElse.Например:

<bean id="mySettings" class="Settings">
  <property name="importantValue" value="whatever" />
</bean>

<bean id="mySomethingElseFactory" class="SomethingElseFactory">
  <property name="settings" ref="mySettings" />
</bean>

Наконец, вы можете инициализировать компонент SomethingElse в контексте приложения как компонент, производный от метода фабрики, например:

<bean id="mySomethingElse" factory-bean="mySomethingElseFactory" factory-method="getASomethingElse" />

Это включает создание третьей фабрикикласс, но позволит вам делать то, что вам нужно.

1 голос
/ 09 декабря 2011
@Component
public class Settings {

Проверка Проверка пути к классам и управляемые компоненты из руководства по пружине.

Обновление Вы также можете использовать SpEL . Вы даже можете смешать свой applicationContext.xml с @Autowired, например, провод по имени или типу.

0 голосов
/ 09 декабря 2011
<bean id="settings" class="com.myCom.settings" />

<bean id="somethingElse" class="com.myCom.somethingElse" />
    <constructor-arg name="something" value="#{settings.something}" />
</bean>
0 голосов
/ 09 декабря 2011

Я не пробовал это, но PropertyPathFactoryBean должен помочь вам.Вы можете аннотировать pojo с помощью @Component и использовать имя «settings» для доступа к нему или можете определить bean-компонент в файле конфигурации после того, как вы это сделаете.

После этого вставьте свойство в «thingElse »через PropertyPathFactoryBean.Объяснение предоставляется здесь . Надеюсь, это поможет.

...