Spring中SmartInitializingSingleton、SmartLifecycle和Lifecycle的作用和区别

相同点:

​ SmartInitializingSingleton和Lifecycle、SmartLifecycle都是在所有的单实例bean创建(getBean方法)之后执行。

不同点:

  • SmartInitializingSingleton优先于Lifecycle、SmartLifecycle执行。
  • SmartInitializingSingleton只有一个afterSingletonsInstantiated方法。而Lifecycle有start,stop,isRunning等方法。
  • 多个SmartInitializingSingleton实现之间无法排序控制执行的顺序,而SmartLifecycle实现了Phased接口,可以通过int getPhase()控制执行循序。
  • SmartInitializingSingleton之间可以通过@DependsOn来控制执行顺序,但这是由Spring中@DependsOn注解的作用及原理来实现的. 并不是对SmartInitializingSingleton做了排序。

SmartLifecycle和Lifecycle作用:

​ 都是让开发者可以在所有的bean都创建完成(getBean) 之后执行自己的初始化工作,或者在退出时执行资源销毁工作

SmartLifecycle和Lifecycle区别:

​ 1. SmartLifecycle接口继承Lifecycle接口,同时继承了org.springframework.context.Phased接口用于控制多个SmartLifecycle实现之间的优先级。

​ 2. 在SpringBoot应用中,或在Spring应用中没有调用AbstractApplicationContext#start方法,如果一个Bean只是实现了Lifecycle接口的情况下:

​ 不会执行Lifecycle接口中的启动方法,包括Lifecycle#isRunning方法也不会被执行。

​ 但是在应用 退出时 会执行Lifecycle#isRunning方法判断该Lifecycle是否已经启动,如果返回true则调用Lifecycle#stop()停止方法

  1. 如果一个Bean实现了SmartLifecycle接口,则会执行启动方法。先会被根据Phased接口优先级分组,封装在LifecycleGroup,然后循环调用LifecycleGroup#start()方法,SmartLifecycle#isRunning判断是否已经执行,返回false表示还未执行,则调用SmartLifecycle#start()执行。Phased返回值越小,优先级越高。

4.SmartLifecycle中还有个isAutoStartup方法,如果返回false,在启动时也不会执行start方法,默认返回true

相关推荐

  1. Spring@Contorller@ResController区别

    2024-03-11 18:40:01       42 阅读
  2. Spring@Controller@RestController区别

    2024-03-11 18:40:01       22 阅读
  3. C#IEnumerable<stringIList<string区别

    2024-03-11 18:40:01       19 阅读
  4. C语言breakcontinue语句作用区别

    2024-03-11 18:40:01       10 阅读
  5. webpack 5 mode作用区别

    2024-03-11 18:40:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 18:40:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 18:40:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 18:40:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 18:40:01       20 阅读

热门阅读

  1. K8S Service

    2024-03-11 18:40:01       25 阅读
  2. Linux进程初步理解

    2024-03-11 18:40:01       25 阅读
  3. SpringBoot中事务

    2024-03-11 18:40:01       26 阅读
  4. Android10禁用wifi随机mac地址,固定mac地址

    2024-03-11 18:40:01       21 阅读
  5. 小蓝的钥匙(蓝桥杯错排)

    2024-03-11 18:40:01       23 阅读
  6. JDBC编程(数据库编程)

    2024-03-11 18:40:01       22 阅读
  7. 视觉信息处理和FPGA实现第二次作业

    2024-03-11 18:40:01       23 阅读
  8. 获取webshell的十种方法

    2024-03-11 18:40:01       20 阅读
  9. Docker与低代码开发:重塑软件开发的未来

    2024-03-11 18:40:01       21 阅读
  10. 计算机视觉(CV)技术的优势和挑战

    2024-03-11 18:40:01       22 阅读
  11. chatgpt How to call functions with chat models

    2024-03-11 18:40:01       20 阅读