springboot啟動前執行方法的幾種方式

2021-09-11 08:28:11 字數 1624 閱讀 6850

第一種 @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...