Может ли bean-компонент Spring быть свойством в своем объявлении в applicationContext.xml? - PullRequest
3 голосов
/ 11 октября 2010

Мне нужно вызывать публичные методы rubberStampService из класса RubberStampServiceImpl.

Чтобы сослаться на rubberStampService изнутри самого себя, могу ли я сделать объявление компонента, ссылающегося на себя, следующим образом:

<beans:bean id="rubberStampService" class="com.rubberly.RubberStampServiceImpl">
    <beans:property name="rubberStampService" ref="rubberStampService" />
</beans:bean>

Ответы [ 2 ]

5 голосов
/ 11 октября 2010

Не вижу проблем с этим подходом.

Spring может обрабатывать циклические зависимости (если они разрешимы, т. Е. Если вы не используете инъекцию в конструктор), в том числе в случае с компонентом, ссылающимся на себя. Единственное отличие состоит в том, что в случае циклических зависимостей бины могут быть не полностью инициализированы, когда они вводятся.

Это может быть полезно, когда bean-компонент может быть сконфигурирован для использования разных соавторов, но в некоторых конкретных случаях он должен использовать сам.

Смотри также:

1 голос
/ 11 октября 2010

Звучит как бесконечно рекурсивная ошибка из-за нехватки памяти.Почему бы просто не заставить сервис вызывать свой собственный метод и покончить с ним?Вам не нужна новая ссылка, просто «это».

public interface FooService()
{
    void foo();
    void bar();
}

public class FooServiceImpl implements FooService
{
    public void foo() { System.out.println("calling foo"); }
    public void bar()
    {
        this.foo(); // just call your own method.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...