Как автоматически связать компонент внутри класса, который не является настроенным компонентом? - PullRequest
4 голосов
/ 10 января 2011

Простите, если я не понял правильную терминологию.

Моя ситуация такова:

У меня есть класс, назовем его TheClass.Внутри этого класса находится объект TheData.

У меня есть XML для установки bean-компонента TheData, например:

<bean id="theData" class="com.abc.TheData">
        <property name="field" value="value1" />

    </bean>

и сеттер внутри TheClass, например:

public void setTheData(TheData theData)
{
     this.theData = theData;
}

Моя проблема заключается в том, что если я не создаю bean-компонент TheClass в XML (и, следовательно, не могу позволить ему автоматически подключиться к нему), он не узнает об автоматическом подключении поля theData (верно?).И из-за определенных ограничений я не могу настроить TheClass в XML (и, следовательно, позже иметь автоматическое подключение).Итак, мой вопрос, как я могу сделать эту работу?Я новичок, поэтому, если я что-то упустил, не стесняйтесь указывать на это.

Ответы [ 4 ]

4 голосов
/ 10 января 2011

Если вы можете получить контекст Spring, приведите его к AutowireCapableBeanFactory и передайте свой экземпляр TheClass методу autowireBean(Object).Затем Spring попытается применить правила автоматического подключения к этому объекту.

Однако вам необходимо добавить @Autowired к методу setTheData.

0 голосов
/ 31 марта 2014

Я только что увидел этот вопрос и подумал, что мог бы добавить еще один способ делать то, что вы хотите (хотя мой выбор - AutowireCapableBeanFactory). Вы можете использовать аннотацию @Configurable, как описано в этом блоге

0 голосов
/ 12 апреля 2013

Вы можете использовать @Resource или @ Component.

0 голосов
/ 11 января 2011

Вы должны иметь возможность просто использовать аннотацию @Autowired для переменной вашего экземпляра, которую устанавливает ваш установщик, без необходимости объявлять bean-компонент TheClass в вашем XML.То есть:

public class TheClass {
  @Autowired
  private TheData theData;
}
...