@Scheduled对应的ScheduledAnnotationBeanPostProcessor,实现定时功能,具体实现流程如图。spring框架内容太多值得学习,日常开发可以借鉴
通过注解@EnableScheduling中的@Import引入了SchedulingConfiguration,而SchedulingConfiguration中配置了一个类型为ScheduledAnnotationBeanPostProcessor名称为org.springframework.context.annotation.internalScheduledAnnotationProcessor的Bean,这里有个常见的技巧,Spring内部加载的Bean一般会定义名称为internalXXX,Bean的role会定义为ROLE_INFRASTRUCTURE = 2。
Bean后置处理器ScheduledAnnotationBeanPostProcessor会解析和处理每一个符合特定类型的Bean中的@Scheduled注解(注意@Scheduled只能使用在方法或者注解上),并且把解析完成的方法封装为不同类型的Task实例,缓存在ScheduledTaskRegistrar中的。
ScheduledAnnotationBeanPostProcessor中的钩子接口方法afterSingletonsInstantiated()在所有单例初始化完成之后回调触发,在此方法中设置了ScheduledTaskRegistrar中的任务调度器(TaskScheduler或者ScheduledExecutorService类型)实例,并且调用ScheduledTaskRegistrar#afterPropertiesSet()方法添加所有缓存的Task实例到任务调度器中执行。
原文:https://www.cnblogs.com/throwable/p/12616945.html
https://juejin.cn/post/6844903817218097166(科学系)
sping中@Scheduled注解的原理
最新推荐文章于 2024-01-18 20:54:02 发布