簡體   English   中英

Spring Boot如何識別子類方法上的@Scheduled?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM