gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:04:52 24 4
gpt4 key购买 nike

当我们也有自定义的init()时,为什么还需要InitializingBeanafterPropertiesSet@Bean(initMethod = "init") 或 @PostConstuct ?哪些行为我可以对其中一个做而不能对另一个做?我什么时候应该使用其中一种而不是另一种。都是在所有属性 Autowiring 后触发的回调。

最佳答案

一般来说,如果 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 文档提供了关于优选初始化方式的清晰解释:

To interact with the container's management of the bean lifecycle, you can implement the Spring InitializingBean and DisposableBean interfaces. The container calls afterPropertiesSet() for the former and destroy() for the latter to allow the bean to perform certain actions upon initialization and destruction of your beans.

The JSR-250 @PostConstruct and @PreDestroy annotations are generally considered best practice for receiving lifecycle callbacks in a modern Spring application. Using these annotations means that your beans are not coupled to Spring specific interfaces.

关于java - Spring:当我们还有自定义的 init() 或 @PostConstuct 时,为什么还需要 InitializingBean 的 afterPropertiesSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com