В чем разница разных способов введения зависимости в Grails:
- abcservice
деф abcService
@Autowired ABCService ABCService
В чем разница разных способов введения зависимости в Grails:
деф abcService
@Autowired ABCService ABCService
abcService
(или другой Spring bean с таким именем) будет иметь другое class
, то здесь вы получите ClassCastException
abcService
NoSuchBeanDefinitionException
(предыдущие два получат null
, если он не существует) @Autowired
также можно комбинировать с типом def
По сути, службы Grails — это стандартные компоненты Spring, Grails просто следует convention over configuration
, что для каждого класса в services
каталоге он будет создайте bean-компонент с именем abcService
, который может быть автоматически подключен к другим bean-компонентам. Всю остальную работу делает Spring. См. также документацию по Spring и Grails.
def
всегда рекомендовалась в более ранних версиях Grails из-за того, что перезагрузка во время разработки работала путем замены загрузчика классов — если вы укажете явный тип, вы получите X, который не может быть приведен к ошибкам X при перезагрузке. Я полагаю, что перезагрузчик на основе агентов в более поздних версиях Grails справляется с этой задачей лучше, но старые привычки тяжело умирают (и, что более важно, обширные библиотеки примеров кода и документации времен Grails 1.x все еще существуют и получают скопировано новыми пользователями). - person Ian Roberts   schedule 28.10.2014