У меня есть случай использования, когда мне нужно вызвать (нестатический) метод в компоненте только один раз при загрузке ApplicationContext. Это нормально, если я использую MethodInvokingFactoryBean для этого? Или у нас есть лучшее решение?
Как примечание, я использую ConfigContextLoaderListener для загрузки контекста приложения в веб-приложении. И хотите, чтобы, если экземпляр E был создан, просто вызовите methodA () один раз.
Как это можно сделать красиво?
Чтобы расширить предложение @PostConstruct в других ответах, на мой взгляд, это действительно лучшее решение.
источник
<context:component-scan>
также работает и может быть полезен для сокращения времени запуска, если в вашем пути к классам есть большие библиотеки, отличные от Spring.Есть три различных подхода к рассмотрению, как описано в ссылке
Используйте атрибут init-method
Плюсы:
Минусы:
Реализация InitializingBean
Плюсы:
Минусы:
Используйте аннотацию жизненного цикла JSR-250 @PostConstruct
Плюсы:
Минусы:
источник
@PostConstruct
именно потому, что она является частью класса, которому нужен метод, вызываемый в конце обработки инициализации.Вы пытались реализовать
InitializingBean
? Это звучит как то, что вы после.Недостатком является то, что ваш бин становится Spring-осведомленным, но в большинстве приложений это не так уж плохо.
источник
Вы можете развернуть пользовательский BeanPostProcessor в контексте вашего приложения, чтобы сделать это. Или, если вы не возражаете против реализации интерфейса Spring в вашем bean-компоненте, вы можете использовать интерфейс InitializingBean или директиву init-method (та же ссылка).
источник
Для дальнейшего устранения любой путаницы в отношении двух подходов, т.е. использования
@PostConstruct
иinit-method="init"
Из личного опыта я понял, что использование (1) работает только в контейнере сервлета, в то время как (2) работает в любой среде, даже в настольных приложениях. Таким образом, если вы будете использовать Spring в автономном приложении, вам придется использовать (2), чтобы выполнить «вызов этого метода после инициализации».
источник
@PostConstruct
(при использовании в приложении на основе Spring) он привязан к сроку службы собственного контекста Spring. Такие контексты могут использоваться во всех видах приложений.