Граальс сервис класс кросс реф - PullRequest
11 голосов
/ 04 ноября 2011

Я понимаю, что классы обслуживания Grails - это управляемые Spring синглтоны. Я также знаю, что вы можете ссылаться на один класс обслуживания из другого, просто объявив локальный def с serviceClassName в случае с верблюдом. Что меня удивило, так это то, что я не могу перекрестно ссылаться на классы обслуживания, как это так

 class FirstService {

   def secondService
 ...
 }

 class SecondService {

   def firstService
 ...
 }

Это правда для всех, или я что-то напутал в ... разделе?

1 Ответ

16 голосов
/ 04 ноября 2011

Grails не может вводить, когда есть круговые ссылки. На самом деле вы должны получить исключение в соответствии с FactoryBean is not fully initialized yet. По этому поводу существует проблема JIRA, в которой они заявили, что не будут это исправлять, так как это больше связано с Spring, чем с Grails (http://jira.grails.org/browse/GRAILS-5080)

Однако в JIRA есть обходной путь, и я могу проверить, работает ли он с Grails 2.0.RC1. В SecondService сделайте его protected def firstService и добавьте def grailsApplication ниже этого значения, а затем добавьте метод def initialize() { this.firstService = grailsApplication.mainContext.firstService }. Наконец, в BootStrap.groovy добавьте def firstService, а затем в закрытие init добавьте secondService.initialize(). Не очень удачное решение, но это поможет вам все подключить так, как вы этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...