Grails-различные способы инъекций зависимостей в Grails

В чем разница разных способов введения зависимости в Grails:

  1. abcservice
  2. деф abcService

  3. @Autowired ABCService ABCService


person egg li    schedule 28.10.2014    source источник
comment
Форма def всегда рекомендовалась в более ранних версиях Grails из-за того, что перезагрузка во время разработки работала путем замены загрузчика классов — если вы укажете явный тип, вы получите X, который не может быть приведен к ошибкам X при перезагрузке. Я полагаю, что перезагрузчик на основе агентов в более поздних версиях Grails справляется с этой задачей лучше, но старые привычки тяжело умирают (и, что более важно, обширные библиотеки примеров кода и документации времен Grails 1.x все еще существуют и получают скопировано новыми пользователями).   -  person Ian Roberts    schedule 28.10.2014
comment
Не могли бы вы объяснить, что такое перезагрузка на основе агента?   -  person egg li    schedule 03.11.2014
comment
Последние версии Grails используют github.com/spring-projects/spring-loaded, Агент Java, который позволяет заменять измененный байт-код во время выполнения без необходимости замены всего загрузчика классов.   -  person Ian Roberts    schedule 03.11.2014


Ответы (1)


  1. Указан ожидаемый тип, если сервис с именем abcService (или другой Spring bean с таким именем) будет иметь другое class, то здесь вы получите ClassCastException
  2. Просто любой бин с именем abcService
  3. Spring аннотация, это необязательно. Но если вы отметили поле, но Grails/Spring не может найти такой bean-компонент, он выдаст NoSuchBeanDefinitionException (предыдущие два получат null, если он не существует) @Autowired также можно комбинировать с типом def

По сути, службы Grails — это стандартные компоненты Spring, Grails просто следует convention over configuration, что для каждого класса в services каталоге он будет создайте bean-компонент с именем abcService, который может быть автоматически подключен к другим bean-компонентам. Всю остальную работу делает Spring. См. также документацию по Spring и Grails.

person Igor Artamonov    schedule 28.10.2014