我有一个用例,我只需要在bean中调用一个(非静态)方法——在ApplicationContext加载时调用一次。如果我用MethodInvokingFactoryBean来做这个可以吗?或者我们有更好的解决方案?
作为旁注,我使用ConfigContextLoaderListener来加载web应用程序中的应用程序上下文。并且,如果bean 'A'被实例化,只需调用methodA()一次。
怎样才能很好地做到这一点呢?
你试过实现InitializingBean吗?听起来正是你想要的。
InitializingBean
缺点是您的bean可以感知spring,但在大多数应用程序中,这并不是那么糟糕。
你可以在你的应用程序上下文中部署一个自定义的BeanPostProcessor来做这件事。或者,如果你不介意在bean中实现Spring接口,你可以使用InitializingBean接口或"init-method"指令(相同的链接)。
你可以这样使用:
<beans> <bean id="myBean" class="..." init-method="init"/> </beans>
这将在bean实例化时调用“init”方法。
有三种不同的方法可以考虑,如参考中所述
在其他答案中扩展@PostConstruct的建议,在我看来,这确实是最好的解决方案。
@PostConstruct
javax.*
为了进一步澄清关于两种方法的任何混淆,即使用
init-method="init"
根据个人经验,我意识到使用(1)只能在servlet容器中工作,而(2)可以在任何环境中工作,甚至在桌面应用程序中。因此,如果要在一个独立的应用程序中使用Spring,就必须使用(2)来实现“在初始化后调用此方法”。