Spring:init-method,PostConstruct,afterPropertiesSet:何时使用其他人?

SR *_*han 16 java spring

Spring bean生命周期中有许多初始化选项.

init-method,PostConstruct注释,afterPropertiesSet,Bean 后初始化甚至是类构造函数.所有这些都可以用于初始化bean.

我很困惑何时使用其中一个.此外,有没有我们可能需要在一个Bean中使用所有这些选项?如果是,请举例说明.

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

ale*_*zak 19

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

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

除此之外,我没有看到差异,除了执行顺序.我不认为有一种情况你想要在同一个班级中拥有所有选项.


geo*_*and 8

我建议你尽可能使用构造函数.有一个非常好的理由这样做:测试

当你要对一个Spring bean进行单元测试时,你将希望能够以最小的忙乱构建类.这意味着您只需要调用构造函数,而不必自己处理调用各种生命周期方法.在创建要测试的类时,您想要的最后一件事是必须知道对象是如何初始化属性的.

使用Spring的构造函数注入支持,您可以轻松地将其他bean或项目属性注入到构造函数中,从而能够覆盖几乎所有场景.

  • 我认为这个 [good] 答案暗示使用“构造函数注入”,只是为了清楚......如果你走这条路,另外有任何 PostConstruct 注释可能是不明智的(http://stackoverflow.com/ a/3406690/1357094)在同一班级。如果仍然如此,@PostConstruct 方法将不会在 [ie:] vanilla JUnit 测试中被调用,因为那里不涉及 Spring! (2认同)