我一直以为 @Scheduled 以同样的方式代理整个豆子 @Async , @Transactional 等等。所以我很惊讶,下面的作品很有魅力:
@Scheduled
@Async
@Transactional
@Component public static class Bean { @Scheduled(fixedRate = 1000) private void scheduled() { System.out.println("Yo"); } }
@Component
public static class Bean {
@Scheduled(fixedRate = 1000)
private void scheduled() {
System.out.println("Yo");
}
他们是改变了什么,还是从一开始就改变了?谢谢。
8zzbczxx1#
简单地说,当spring检测到 @EnableScheduling 它创建了一个新的 ScheduledAnnotationBeanPostProcessor 能够处理 @Scheduled 注解。在找到 @Scheduled 使用反射的注解,它将读取它们的配置,然后将它们注册,以便由 TaskScheduler . 一 ScheduledTaskRegistrar 用于帮助将任务提交给 ScheduledThreadPoolExecutor .如您所见,没有创建代理。
@EnableScheduling
ScheduledAnnotationBeanPostProcessor
TaskScheduler
ScheduledTaskRegistrar
ScheduledThreadPoolExecutor
1条答案
按热度按时间8zzbczxx1#
简单地说,当spring检测到
@EnableScheduling
它创建了一个新的ScheduledAnnotationBeanPostProcessor
能够处理@Scheduled
注解。在找到@Scheduled
使用反射的注解,它将读取它们的配置,然后将它们注册,以便由TaskScheduler
. 一ScheduledTaskRegistrar
用于帮助将任务提交给ScheduledThreadPoolExecutor
.如您所见,没有创建代理。