我一直认为@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
提交任务。
可以看到,没有创建代理。