我有一个用例,我需要在ApplicationContext加载时只在bean中调用一个(非静态)方法。如果我使用MethodInvokingFactoryBean吗?或者我们有更好的解决方案?
作为旁注,我使用ConfigContextLoaderListener在Web应用程序中加载应用程序上下文。并希望,如果bean'A'被实例化,只需调用methodA()一次。
如何做得好呢?
答案 0 :(得分:295)
在其他答案中扩展@PostConstruct建议,在我看来,这确实是最好的解决方案。
答案 1 :(得分:194)
您可以使用以下内容:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
这将在实例化bean时调用“init”方法。
答案 2 :(得分:98)
有三种不同的方法需要考虑,如reference
中所述答案 3 :(得分:38)
您是否尝试过实施InitializingBean
?这听起来就像你正在追求的那样。
缺点是你的bean会变成Spring知识,但在大多数应用程序中都不是那么糟糕。
答案 4 :(得分:8)
您可以在应用程序上下文中部署自定义BeanPostProcessor来执行此操作。或者,如果您不介意在bean中实现Spring接口,可以使用InitializingBean接口或“init-method”指令(相同链接)。
答案 5 :(得分:-7)
进一步澄清对这两种方法的混淆,即使用
@PostConstruct
和init-method="init"
从个人经验来看,我意识到使用(1)只能在servlet容器中工作,而(2)适用于任何环境,甚至在桌面应用程序中。因此,如果您在独立应用程序中使用Spring,则必须使用(2)执行“在初始化后调用此方法。”