Графический сервисный класс Grails

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

 class FirstService {

   def secondService
 ...
 }

 class SecondService {

   def firstService
 ...
 }

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

Ответ 1

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(). Не очень красивое решение, но все это будет подходить так, как вы хотите.