春天的@Scheduled实际上是如何运作的?



我一直认为@Scheduled通过代理整个bean来工作,就像@Async,@Transactional等一样。所以我很惊讶,下面的作品就像一个魅力:

@Component
public static class Bean {
@Scheduled(fixedRate = 1000)
private void scheduled() {
System.out.println("Yo");
}
}

他们改变了什么,还是从一开始就是这样?谢谢。

简而言之,使用最简单的配置,当Spring检测到@EnableScheduling注释时,它创建一个能够处理@Scheduled注释的新ScheduledAnnotationBeanPostProcessor。在使用反射找到@Scheduled注释之后,它将读取它们的配置,然后注册它们,以便被TaskScheduler调用。ScheduledTaskRegistrar用于帮助向ScheduledThreadPoolExecutor提交任务。

可以看到,没有创建代理。

最新更新