我有一个用例,需要在加载ApplicationContext时仅调用bean中的(非静态)方法一次。如果我使用MethodsManagingFactoryBean来做这个,可以吗?或者我们有更好的解决办法?作为一个侧面说明,我使用ConfigContextLoader来加载Web应用程序中的应用程序上下文。如果bean 'A'被示例化,只需要调用methodA()一次。这怎么能做得好呢?
knsnq2tg1#
为了在其他答案中扩展@PostConstruct建议,在我看来,这确实是最好的解决方案。
@PostConstruct
javax.*
mxg2im7a2#
你可以使用类似的东西:
<beans> <bean id="myBean" class="..." init-method="init"/> </beans>
这将在bean示例化时调用“init”方法。
fwzugrvs3#
有三种不同的方法可以考虑,如参考文献
k5hmc34c4#
你试过使用InitializingBean吗?听起来正是你想要的。缺点是您的bean将成为Spring感知的,但在大多数应用程序中,这并不是那么糟糕。
InitializingBean
ebdffaop5#
你可以在你的应用程序上下文中部署一个自定义的BeanPostProcessor。或者,如果您不介意在bean中实现Spring接口,您可以使用InitializingBean接口或“init-method”指令(同一链接)。
slmsl1lt6#
为了进一步澄清对这两种方法的任何混淆,即使用
init-method="init"
6条答案
按热度按时间knsnq2tg1#
为了在其他答案中扩展
@PostConstruct
建议,在我看来,这确实是最好的解决方案。@PostConstruct
位于javax.*
中)mxg2im7a2#
你可以使用类似的东西:
这将在bean示例化时调用“init”方法。
fwzugrvs3#
有三种不同的方法可以考虑,如参考文献
使用init-method属性
优点:
缺点:
实现InitializingBean
优点:
缺点:
使用JSR-250@PostConstruct生命周期注解
优点:
缺点:
k5hmc34c4#
你试过使用
InitializingBean
吗?听起来正是你想要的。缺点是您的bean将成为Spring感知的,但在大多数应用程序中,这并不是那么糟糕。
ebdffaop5#
你可以在你的应用程序上下文中部署一个自定义的BeanPostProcessor。或者,如果您不介意在bean中实现Spring接口,您可以使用InitializingBean接口或“init-method”指令(同一链接)。
slmsl1lt6#
为了进一步澄清对这两种方法的任何混淆,即使用
@PostConstruct
和init-method="init"
根据个人经验,我意识到使用(1)只在servlet容器中有效,而(2)在任何环境中都有效,甚至在桌面应用程序中也有效。因此,如果您在独立应用程序中使用Spring,则必须使用(2)来执行“在初始化后调用此方法”。