springBoot啟動時讓方法自動執行的幾種實現方式
在springBoot中我們有時候需要讓項目在啟動時提前加載相應的數據或者執行某個方法,那么實現提前加載的方式有哪些呢?接下來我帶領大家逐個解答
1.實現ServletContextAware接口并重寫其setServletContext方法
@Componentpublic class TestStarted implements ServletContextAware { /** * 在填充普通bean屬性之后但在初始化之前調用 * 類似于initializingbean的afterpropertiesset或自定義init方法的回調 * */ @Override public void setServletContext(ServletContext servletContext) { System.out.println('setServletContext方法'); }}
注意:該方法會在填充完普通Bean的屬性,但是還沒有進行Bean的初始化之前執行
2.實現ServletContextListener接口
/** * 在初始化Web應用程序中的任何過濾器或servlet之前,將通知所有servletContextListener上下文初始化。 */ @Override public void contextInitialized(ServletContextEvent sce) { //ServletContext servletContext = sce.getServletContext(); System.out.println('執行contextInitialized方法'); }
3.將要執行的方法所在的類交個spring容器掃描(@Component),并且在要執行的方法上添加@PostConstruct注解或者靜態代碼塊執行
@Componentpublic class Test2 { //靜態代碼塊會在依賴注入后自動執行,并優先執行 static{ System.out.println('---static--'); } /** * @Postcontruct’在依賴注入完成后自動調用 */ @PostConstruct public static void haha(){ System.out.println('@Postcontruct’在依賴注入完成后自動調用'); }}
4.實現ApplicationRunner接口
/** * 用于指示bean包含在SpringApplication中時應運行的接口。可以定義多個applicationrunner bean * 在同一應用程序上下文中,可以使用有序接口或@order注釋對其進行排序。 */ @Override public void run(ApplicationArguments args) throws Exception { System.out.println('ApplicationRunner的run方法'); }
5.實現CommandLineRunner接口
/** * 用于指示bean包含在SpringApplication中時應運行的接口。可以在同一應用程序上下文中定義多個commandlinerunner bean,并且可以使用有序接口或@order注釋對其進行排序。 * 如果需要訪問applicationArguments而不是原始字符串數組,請考慮使用applicationrunner。 * */ @Override public void run(String... ) throws Exception { System.out.println('CommandLineRunner的run方法'); }
到此這篇關于springBoot啟動時讓方法自動執行的幾種實現方式的文章就介紹到這了,更多相關springBoot啟動時自動執行內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章:
