Ответ 1
Вы можете использовать что-то вроде:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
Это вызовет метод "init" при создании bean.
Я использую случай, когда мне нужно вызвать (нестатический) метод в bean только один раз при загрузке ApplicationContext. Это нормально, если я использую MethodInvokingFactoryBean для этого? Или у нас есть лучшее решение?
В качестве примечания я использую ConfigContextLoaderListener для загрузки Контекста приложений в веб-приложении. И хотите, чтобы если bean 'A' был экземпляр, просто вызовите методA() один раз.
Как это можно сделать красиво?
Вы можете использовать что-то вроде:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
Это вызовет метод "init" при создании bean.
Чтобы расширить предложение @PostConstruct в других ответах, это действительно лучшее решение, на мой взгляд.
Существует три разных подхода к рассмотрению, как описано в reference
Вы пытались реализовать InitializingBean
? Это похоже на то, что вам нужно.
Недостатком является то, что ваш bean становится Spring -aware, но в большинстве приложений это не так уж плохо.
Вы можете развернуть в своем приложении контекст InitializingBean или" init -метод "(та же ссылка).
Чтобы еще больше устранить путаницу в отношении двух подходов, используя
@PostConstruct
иinit-method="init"
Из личного опыта я понял, что использование (1) работает только в контейнере сервлетов, а (2) работает в любой среде, даже в настольных приложениях. Итак, если вы используете Spring в автономном приложении, вам придется использовать (2) для выполнения этого "вызывать этот метод после инициализации".