[英]How does Spring Boot recognize @Scheduled on a subclass' method?
讓我們以一個簡單的Spring Boot程序為例:
應用程序
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class);
}
}
超類.java
public abstract class SuperClass {
@Scheduled(fixedRate = 5000)
public void printSomething() {
System.out.println("this is the super method");
}
}
子類
@Component
public class SubClass extends SuperClass {
}
根據此答案,子類將僅繼承由@Inherited
注釋的注釋,而@Scheduled沒有此類注釋。 那么這怎么起作用呢?
@Inherited
僅適用於類類型,不適用於方法。
請注意,如果帶注釋的類型用於注釋除類之外的任何內容,則此元注釋類型無效。 還要注意,此元注釋僅使注釋從超類繼承; 已實現的接口上的注釋無效。
當Spring掃描bean中的@Scheduled
注釋(或其他注釋)時,它將在bean類中查找所有方法。 SubClass
具有printSomething
因此Spring決定可以通過調度行為來增強它。
Spring處理@Scheduled
的方式與標准代理機制略有不同,並且能夠調用帶有注釋的private
方法。
如果您重寫了子類中的printSomething
方法,並在該聲明上省略了@Scheduled
注釋,那么Spring將不會應用調度行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.