Spring:初始化方法,后期构造,后属性集:何时使用一个而不是其他方法?

2022-09-02 01:23:32

在弹簧豆生命周期中有很多初始化选项可用。

init-methodPostConstruct Annotation,afterPropertiesSet,Bean post-initialization甚至类构造函数。所有这些都可用于初始化 Bean。

我感到困惑的是,什么时候使用一个这些而不是另一个。此外,是否有任何情况我们可能需要在单个Bean中使用所有这些选项?如果是,请举例说明会很好。

真的很期待得到一些很好的答案。


答案 1

使用构造函数和其他选项的区别在于,构造函数代码是第一个执行的,而其他选项只有在将依赖项注入 Bean(来自@Autowired注释或 XML 文件)后才会被调用。

您在构造函数中编写的代码将在 Bean 的属性仍未启动时运行。所有@Autowired字段都将为空。有时这是您想要的,但通常您希望代码在设置属性后运行。

除此之外,我没有看到任何区别,除了执行顺序。我不认为有一种情况你会希望在同一类中拥有所有选项。


答案 2

我建议您只在可能的情况下使用构造函数。有一个非常非常好的理由这样做:测试

当你要对Spring Bean进行单元测试时,你会希望能够以最小的麻烦构建类。这意味着您只需要调用构造函数,而不必自己处理调用各种生命周期方法。在创建要测试的类时,您最不希望看到的就是必须知道对象是如何初始化属性的。

借助Spring的构造函数注入支持,您可以轻松地将其他bean或项目属性注入构造函数,从而能够涵盖几乎所有场景。


推荐