#java #spring #aop
#java #spring #aop
Вопрос:
Я всегда думал, что @Scheduled
это работает путем проксирования всего компонента, так же @Async
, @Transactional
как и , И т. Д. Итак, я был удивлен, что следующее работает как шарм:
@Component
public static class Bean {
@Scheduled(fixedRate = 1000)
private void scheduled() {
System.out.println("Yo");
}
}
Они что-то изменили или так было с самого начала?
Спасибо.
Ответ №1:
В нескольких словах, с максимально простой конфигурацией, когда Spring обнаруживает @EnableScheduling
аннотацию, он создает новую ScheduledAnnotationBeanPostProcessor
, которая способна обрабатывать @Scheduled
аннотации. После нахождения @Scheduled
аннотаций с использованием отражения он прочитает их конфигурацию, а затем зарегистрирует их для вызова TaskScheduler
. A ScheduledTaskRegistrar
используется, чтобы помочь отправить задачу в ScheduledThreadPoolExecutor
.
Как вы можете видеть, прокси-сервер не создается.
Комментарии:
1. Интересно, спасибо. Однако мне это кажется немного запутанным. Я имею в виду, что вы ожидаете, что он будет согласован с другими. В любом случае, я думаю, имеет смысл избегать ненужных прокси, когда это возможно.