我有一个用例,我只需要在加载 ApplicationContext 时调用 bean 中的(非静态)方法一次。如果我为此使用 MethodInvokingFactoryBean 可以吗?或者我们有更好的解决方案?
作为旁注,我使用 ConfigContextLoaderListener 在 Web 应用程序中加载应用程序上下文。并且想要,如果 bean 'A' 被实例化,只需调用一次 methodA() 。
这怎么能做得很好?
我有一个用例,我只需要在加载 ApplicationContext 时调用 bean 中的(非静态)方法一次。如果我为此使用 MethodInvokingFactoryBean 可以吗?或者我们有更好的解决方案?
作为旁注,我使用 ConfigContextLoaderListener 在 Web 应用程序中加载应用程序上下文。并且想要,如果 bean 'A' 被实例化,只需调用一次 methodA() 。
这怎么能做得很好?
To expand on the @PostConstruct
suggestion in other answers, this really is the best solution, in my opinion.
@PostConstruct
is in javax.*
)你可以使用类似的东西:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
这将在实例化 bean 时调用“init”方法。
如参考资料中所述,需要考虑三种不同的方法
您是否尝试过实施InitializingBean
?这听起来正是你所追求的。
缺点是您的 bean 变得支持 Spring,但在大多数应用程序中并没有那么糟糕。
您可以在应用程序上下文中部署自定义BeanPostProcessor来执行此操作。或者,如果您不介意在 bean 中实现 Spring 接口,则可以使用InitializingBean接口或“init-method”指令(相同链接)。
为了进一步清除关于这两种方法的任何混淆,即使用
@PostConstruct
和init-method="init"
根据个人经验,我意识到使用 (1) 仅适用于 servlet 容器,而 (2) 适用于任何环境,甚至适用于桌面应用程序。因此,如果您要在独立应用程序中使用 Spring,则必须使用 (2) 来执行“在初始化后调用此方法。