Spring:当我们还有自定义init()或@PostConstuct时,为什么需要在InitializingBean的afterPropertiesSet

时间:2018-05-21 11:49:05

标签: java spring javabeans

当我们还有自定义afterPropertiesSet时,为什么需要InitializingBean init() @Bean(initMethod = "init")@PostConstuct? 我可以用一个做什么而不做另一个做什么? 我何时应该使用一个而不是另一个。 在所有属性自动装配后触发所有回调。

1 个答案:

答案 0 :(得分:7)

通常,如果bean实现InitializingBean,则先调用@PostConstruct,然后调用afterPropertiesSet,然后调用init-method

Spring bean lifecycle

@PostConstruct是一个JSR-250注释,而init-methodInitializingBean是Spring用于bean初始化的工具。

InitializingBean与init-method

在Spring工具之间选择init-methoddestroy-method是推荐的方法,因为它没有直接依赖于Spring Framework,我们可以创建自己的方法。 init-method是一种独立于Spring调用自定义方法的方法,如果您决定使用其他框架,则可以重用此方法。

PostConstruct与Spring工具

Spring文档提供了有关优选初始化方法的明确说明:

  

要与容器对bean生命周期的管理进行交互,您   可以实现Spring InitializingBeanDisposableBean   接口。容器为前者调用afterPropertiesSet()   和destroy()后者允许bean执行某些操作   初始化和销毁​​bean时的操作。

     

JSR-250 @PostConstruct@PreDestroy注释通常都是   被认为是接受现代生命周期回调的最佳实践   Spring应用程序。使用这些注释意味着你的bean是   没有加入Spring特定的接口。