2009-08-21 3 views
1

У меня есть класс MessageQueue. Это просто очередь сообщений. Бобы, которые нуждаются в возможности отправлять сообщения, просто имеют свойство MessageQueue, а Spring позаботится об инъекции.Циркулярная зависимость и Spring-powered Queue

Проблема в том, что многие бобы должны также регистрироваться в качестве слушателей. Список компонентов-слушателей не может быть введен в messageQueue, потому что это приведет к циклическим зависимостям. Многие бобы вверх и вниз по цепочке зависимостей должны отправлять сообщения и/или слушать сообщения.

Как же тогда очередь сообщений Spring-powered будет реализована таким образом, чтобы она не включала круговые зависимости?

ответ

0

Хорошо, я беспокоился о чем-то, что было на самом деле прекрасно. На самом деле многое зависит от очереди, но сама очередь зависит от ничего. Он не имеет собственных зависимостей и поэтому никоим образом не приводит к циклическим проблемам зависимости. Это просто лист с большим количеством родителей. Глупо меня :-)

0

Вы используете инсталляцию конструктора или сеттера? Если вы используете инъекцию сеттера (автоматически или нет), тогда вы в порядке. Spring может разрешать круговые зависимости. Все, что он делает, - это ввести объект перед тем, как он введет свойства. Поэтому, если у вас есть такой объект, он лучше всего не использовать его в сеттере. Если вам нужно выполнить инициализацию, используйте @PostConstruct или интерфейс InitiazlizingBean с методом afterPropertiesSet().

+0

Большинство моих бобов используют сеттеры, но, по крайней мере, некоторые из них являются устаревшими, и у обоих есть обязательные конструкторы, и, к сожалению, они не могут быть осведомлены о Spring. Но определенно хорошая идея! –

0

Если у вас возникла ситуация, связанная с подключением неудобных классов устаревших конструкций с конструкторами, которые «делают вещи», например, настройку слушателей, я обычно обертываю унаследованный wotsit в пользовательскую Spring FactoryBean. Это будет иметь все необходимые сеттеры и только создает экземпляр целевого объекта, когда Spring закончит проводку круговых зависимостей.

Не бойтесь круговых зависимостей, весна обрабатывает их элегантно, пока объект-экземпляр и инъекция довольно пассивны. Хорошо используйте @PostConstruct и/или InitializingBean, чтобы жизненный цикл Spring был для вас тяжелой работой.

Смежные вопросы