@PostConstruct和@Autowired誰先執(zhí)行

注解@PostConstruct作用


在項(xiàng)目啟動的時候洛勉,會執(zhí)行該注解注釋的方法粘秆,譬如項(xiàng)目啟動的時候做一些常量初始化操作。

用法


@RequestMapping("/menu")
@RestController
public class MenuController {
 
    @Autowired
    private MenuServiceImpl menuService;
 
    @GetMapping("/testMenu")
    public Map<String, String> testMenu() {
        return menuService.testMenu();
    }
}
 
@Slf4j
@Service
public class MenuServiceImpl {
 
    private final Map<String, String> dataMap = new HashMap<>();
 
    @PostConstruct
    public void initDataMap() {
        dataMap.put("1", "zhangsan");
        dataMap.put("2", "wangwu");
    }
 
    public Map<String, String> testMenu() {
        Map<String, String> resultMap = new HashMap<>();
        resultMap.putAll(dataMap);
        return resultMap;
    }
}

結(jié)果:

前面提到了@PostConstruct在項(xiàng)目啟動的時候執(zhí)行方法收毫,那么@PostConstruct到底在springboot的執(zhí)行流程中攻走,什么時候執(zhí)行呢?

還是得來一張springboot執(zhí)行流程圖:

什么時候執(zhí)行@PostConstruct


bean實(shí)例化 -> bean屬性填充 -> 找到@PostConstruct注解(postProcessBeforeInitialization方法) -> 執(zhí)行@PostConstruct注解的方法(invokeInitMethods方法方法)

找到@PostConstruct注解

initializeBean方法中的postProcessBeforeInitialization方法(bean的前置處理操作)牛哺,找到@PostConstruct注解陋气。

說明:

  • @PostConstruct注解使用InitDestroyAnnotationBeanPostProcessor后置處理器,執(zhí)行其postProcessBeforeInitialization前置處理方法引润。
  • postProcessBeforeInitialization方法,通過findLifecycleMetadata方法找到注解@PostConstruct痒玩;

執(zhí)行@PostConstruct注解標(biāo)識方法

說明:

通過invokeInitMethods方法執(zhí)行注解@PostConstruct標(biāo)識的方法淳附,通過java反射的方式調(diào)用bean的@PostConstruct注解標(biāo)識的方法。

@PostConstruct和@Autowired誰先執(zhí)行


進(jìn)入正題蠢古,@Autowired先于@PostConstruct執(zhí)行奴曙。

  • 解釋:
    @Autowired是用于注入對象,注入對象到this.beanDefinitionMap是在invokeBeanFactoryPostProcessors()方法中實(shí)現(xiàn)的草讶,而@PostConstruct標(biāo)識的方法洽糟,用于在前置處理階段,而之前都已經(jīng)走過了實(shí)例化createBeanInstance和屬性注入populateBean階段堕战。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坤溃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嘱丢,更是在濱河造成了極大的恐慌薪介,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件越驻,死亡現(xiàn)場離奇詭異汁政,居然都是意外死亡道偷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門记劈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勺鸦,“玉大人,你說我怎么就攤上這事目木』煌荆” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵嘶窄,是天一觀的道長怀跛。 經(jīng)常有香客問我,道長柄冲,這世上最難降的妖魔是什么吻谋? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮现横,結(jié)果婚禮上漓拾,老公的妹妹穿的比我還像新娘。我一直安慰自己戒祠,他們只是感情好骇两,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姜盈,像睡著了一般低千。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馏颂,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天示血,我揣著相機(jī)與錄音,去河邊找鬼救拉。 笑死难审,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亿絮。 我是一名探鬼主播告喊,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼派昧!你這毒婦竟也來了黔姜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤斗锭,失蹤者是張志新(化名)和其女友劉穎地淀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岖是,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帮毁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年实苞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烈疚。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡黔牵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爷肝,到底是詐尸還是另有隱情猾浦,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布灯抛,位于F島的核電站金赦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏对嚼。R本人自食惡果不足惜夹抗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纵竖。 院中可真熱鬧漠烧,春花似錦、人聲如沸靡砌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽通殃。三九已至度液,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間画舌,已是汗流浹背恨诱。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骗炉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓蛇受,卻偏偏與公主長得像句葵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兢仰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容