Spring的@Scheduled实际上是如何工作的?
我始终认为,@Scheduled作品代理所述全豆,同样的方式@Async,@Transactional等做。所以我很惊讶以下内容就像一个魅力:
@Component
public static class Bean {
@Scheduled(fixedRate = 1000)
private void scheduled() {
System.out.println("Yo");
}
}
他们有没有改变什么,或者从一开始就是这样?谢谢。
回答
简而言之,使用最简单的配置,当 Spring 检测到@EnableScheduling注解时,它会创建一个ScheduledAnnotationBeanPostProcessor能够处理@Scheduled注解的新注解。@Scheduled使用反射找到注解后,它会读取它们的配置,然后注册它们以便被TaskScheduler. AScheduledTaskRegistrar用于帮助提交任务到ScheduledThreadPoolExecutor.
如您所见,没有创建代理。