Может ли контейнер Spring внедрить коллабораторов с помощью пользовательских методов? - PullRequest
2 голосов
/ 29 июля 2010

Обычно зависимости вводятся через сеттеры в следующей конфигурации (http://static.springsource.org/sprin...beans-beanname):

<bean id="exampleBean" class="examples.ExampleBean">
    <!-- setter injection using the nested <ref/> element -->
    <property name="beanOne"><ref bean="anotherExampleBean"/></property>

    <!-- setter injection using the neater 'ref' attribute -->
    <property name="beanTwo" ref="yetAnotherBean"/>
    <property name="integerProperty" value="1"/>
</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

Допустим, класс examples.ExampleBean имеет объекты прослушивателей коллекции, а метод addListener(SomeListenerInterface) имеет видЕдинственный возможный способ добавить слушателей. Могу ли я декларативно вводить слушателей в xml, как это делается с помощью установщиков свойств?

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Возможно, вы могли бы придумать какой-нибудь барочный механизм для выполнения всего этого в XML, но самый чистый способ сделать это - использовать FactoryBean. Вы пишете класс, который реализует FactoryBean и отвечает за создание и настройку целевого объекта (см. Spring docs ). Ваш FactoryBean будет иметь необходимые геттеры / сеттеры / автопроводки и вставит их в целевой объект.

Это часто самый чистый способ обработки не-javabeans в Spring, особенно если вы не можете изменить целевой класс.

1 голос
/ 29 июля 2010

Здесь идет свойство Определение элемента

Элементы свойства соответствуют JavaBean методам установки , предоставляемым классами компонентов.

Чтобы получить вашу цель,Вы можете использовать аннотацию @Autowired.Он работает даже при использовании произвольного имени

@Autowired
public void inject(SomeListenerInterface someListenerInterface) {
    this.someListenerInterface = someListenerInterface;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...