#java #groovy
#java #groovy
Вопрос:
Рассмотрим немного Groovy-кода, такого как:
def trainingCorpus = new CorpusNexmlReader(ignoreMissingTags: true,
model: model, source: corpus,
abideByUse: true, useListSource: true,
listSourceDir: corpus "/all/",
listSource: corpus "/all/split_all.txt",
tagMap: tagMap
)
Это помогает использовать конструктор без аргументов для создания объекта, а затем выполняет вызовы
для всех установщиков, соответствующих именованным параметрам. Теперь, если я добавлю @PostConstruct,
будет ли Groovy вызывать его после всех этих настроек?
Ответ №1:
Нет, этого не произойдет. @PostConstruct
Используется только для spring beans (создается контекстом spring, а не вами)
Комментарии:
1. Должно быть, я что-то упускаю (по общему признанию, я мало знаю о Groovy) — при чем здесь Spring?
2. @McDowell Он не упомянул об этом явно, поэтому я могу предположить неправильный сценарий, но groovy обычно работает с grails. А grails основан на spring.
Ответ №2:
Из javadocs в аннотации @PostConstruct:
«Аннотация PostConstruct используется в методе, который необходимо выполнить после внедрения зависимости для выполнения любой инициализации. Этот метод ДОЛЖЕН быть вызван до того, как класс будет запущен в эксплуатацию. Эта аннотация ДОЛЖНА поддерживаться во всех классах, которые поддерживают внедрение зависимостей»
Groovy не является фреймворком для внедрения зависимостей. Он не будет выполнять никакой обработки аннотаций, направленных на платформы DI. Если вы создавали свой компонент как Spring bean, используя spring Builder от Groovy, то он должен учитывать эту аннотацию.
С другой стороны, вы могли бы прочитать и обработать эту аннотацию самостоятельно.