第一種 @postconstruct註解
@configuration
public class test1
}
第二種 實現initializingbean介面
@configuration
public class test2 implements initializingbean
}
第三種 實現beanpostprocessor介面
@configuration
public class test3 implements beanpostprocessor
@override
public object postprocessafterinitialization(object bean, string beanname) throws bean***ception
}
@component
public class runner implements commandlinerunner
}
第四種 在啟動類run之前執行方法
public static void main(string args) }
當然這是不可取的
他們執行的優先順序是
啟動類前->beanpostprocessor->@postconstruct->initializingbean
值得注意的是第三種方式,他可以讓實現類裡的方法提前執行
同樣的使用@postconstruct的兩個類
@configuration
public class test1
}
@configuration
public class test3 implements beanpostprocessor
}
第乙個沒有實現beanpostprocessor介面
第二個實現了beanpostprocessor介面,但是沒有重寫他的方法
可以看到同樣是使用了@postconstruct註解,但是他們的執行順序卻截然不同
beanpostprocessor為每乙個spring維護的物件呼叫前後做操作,實現了它我們當前類就會變成乙個beanpostprocessor物件,就可以像beanpostprocessor一樣在容器載入最初的幾個階段被例項化,只要被例項化,postconstruct註解的標註的方法就會立即執行.
知道了啟動時的載入順序,對我們做一些初始化工作有幫助。
如果執行後載入時呢?
import org.springframework.stereotype.component;
@component
@override
system.out.println(args);
}commandlinerunner 同理!
如果控制執行順序可以使用@order(1) 來控制執行順序
Spring Boot 啟動執行
public static void main string args return run new class args spring boot主程式main方法只做了兩件事 this null,primarysources resourceloader null this.resourceloa...
springboot專案啟動自動執行
order value 1 專案啟動執行方法的順序,從小到大 component override system.out.println start 帶有此註解的類在專案啟動時會自動註冊在spring容器 service public class redislockinit 被 postconstr...
springboot啟動後執行某些命令
多個類實現介面可以使用 order註解來定義執行順序 專案啟動完成了,因此可以注入spring管理的類 例項 component order 1 autowired private stringredistemplate stringredistemplate override stringredi...