当我们还有自定义afterPropertiesSet
时,为什么需要InitializingBean
init()
@Bean(initMethod = "init")
或@PostConstuct
?
我可以用一个做什么而不做另一个做什么?
我何时应该使用一个而不是另一个。
在所有属性自动装配后触发所有回调。
答案 0 :(得分:7)
通常,如果bean实现InitializingBean
,则先调用@PostConstruct
,然后调用afterPropertiesSet
,然后调用init-method
。
@PostConstruct
是一个JSR-250
注释,而init-method
和InitializingBean
是Spring用于bean初始化的工具。
InitializingBean与init-method
在Spring工具之间选择init-method
和destroy-method
是推荐的方法,因为它没有直接依赖于Spring Framework,我们可以创建自己的方法。 init-method
是一种独立于Spring调用自定义方法的方法,如果您决定使用其他框架,则可以重用此方法。
PostConstruct与Spring工具
Spring文档提供了有关优选初始化方法的明确说明:
要与容器对bean生命周期的管理进行交互,您 可以实现Spring
InitializingBean
和DisposableBean
接口。容器为前者调用afterPropertiesSet()
和destroy()
后者允许bean执行某些操作 初始化和销毁bean时的操作。JSR-250
@PostConstruct
和@PreDestroy
注释通常都是 被认为是接受现代生命周期回调的最佳实践 Spring应用程序。使用这些注释意味着你的bean是 没有加入Spring特定的接口。