如何调用一个方法之后bean的初始化完成?如何调用一个方法之后bean的初始化完成?(How to

2019-05-17 06:58发布

我有我需要的ApplicationContext的负载为调用在bean(非静态)方法只一次,一个用例。 它是确定的,如果我使用的MethodInvokingFactoryBean这个? 或者我们有一些更好的解决办法?

作为一个方面说明,我用ConfigContextLoaderListener加载在Web应用程序的应用程序上下文。 并希望,如果豆“A”被实例化只是调用了methodA()一次。

这可怎么好做?

Answer 1:

您可以使用这样的:

<beans>
    <bean id="myBean" class="..." init-method="init"/>
</beans>

当bean被实例化这将调用“初始化”方法。



Answer 2:

为了扩大在其他的答案中@PostConstruct建议,这真的是最好的解决办法,在我看来。

  • 它使你的代码从Spring API解耦(@PostConstruct在使用javax。*)
  • 它明确地诠释您的init方法的东西需要被调用初始化豆
  • 你并不需要记住给init-method属性添加到您的Spring bean定义,弹簧会自动调用该方法(假设你注册的背景下,其他地方的注解配置选项,反正)。


Answer 3:

有考虑三种不同的方法,如所描述的参考

可使用init-method属性

优点:

  • 不需要bean来实现一个接口。

缺点:

  • 施工后需要这种方法来确保豆没有立即指示正确配置。

实施的InitializingBean

优点:

  • 不需要指定初始化方法,或打开组件扫描/注释处理。
  • 适合与一个图书馆,在这里我们不使用这个库与bean的生命周期关心自己想要的应用程序提供的豆类。

缺点:

  • 比初始化方法的方法更侵入性的。

使用JSR-250 @PostConstruct生命周期注解

优点:

  • 使用分量扫描到自动检测豆时是有用的。
  • 清楚地表明,一个具体方法是将被用于初始化。 原意是接近于代码。

缺点:

  • 在初始化配置不再集中指定。
  • 你一定记得打开注释处理(这有时被遗忘)


Answer 4:

你有没有尝试过实施InitializingBean ? 这听起来像你是什么之后。

缺点是,你的bean成为Spring的,但在大多数应用中,这不是那么糟糕。



Answer 5:

你可以部署一个定制BeanPostProcessor的在你的应用环境做到这一点。 或者,如果你不介意实现在bean Spring的接口,你可以使用的InitializingBean接口或“初始化方法”指令(相同的链接)。



Answer 6:

为了进一步明确关于这两个办法,即使用任何混乱

  1. @PostConstruct
  2. init-method="init"

从个人的经验,我意识到,使用(1)只能在一个servlet容器,而(2)在任何环境下使用,即使在桌面应用程序。 所以,如果你在一个独立的应用程序中使用Spring,你将不得不使用(2)开展的是“呼叫初始化后,此方法。



文章来源: How to call a method after bean initialization is complete?