@PostConstruct在項目啟動時被執(zhí)行兩次或多次的原因及分析
@PostConstruct項目啟動時被執(zhí)行兩次或多次
原因
是因為文件對@PostConstruct所在類掃描了兩次!
首先排查,帶有掃描包配置(context:component-scan)的同一spring文件,是否在web.xml配置中,初始化就執(zhí)行的那種配置(比如context-param,init-param),被重復(fù)的配置了兩遍。
然后在排查,web.xml中配置了初始化配置的多個spring文件是否都掃描了@PostConstruct所在類的所在包!常見SpringMVC文件的掃描路徑中也包含了@PostConstruct所在類的所在包。
@PostConstruct執(zhí)行順序
最近看到@PostConstruct這個注解,思考一個問題,這個注釋是修飾初始化之后需要執(zhí)行的方法,那么@PostConstruct和@Autowired、構(gòu)造函數(shù)的執(zhí)行順序是什么呢?
寫了段代碼驗證一下
@Service public class BeanA { @Autowired private BeanB beanB; public BeanA() { System.out.println("這是Bean A 的構(gòu)造方法"); } @PostConstruct private void init() { System.out.println("這是BeanA的 init 方法"); beanB.testB(); } } @Service public class BeanB { @PostConstruct private void init() { System.out.println("這是BeanB 的init 方法"); } public BeanB() { System.out.println("這是Bean B的 構(gòu)造方法"); } void testB() { System.out.println("這是Bean B 的 testB 方法"); } }
啟動后輸出:
這是Bean A 的構(gòu)造方法
這是Bean B的 構(gòu)造方法
這是BeanB 的init 方法
這是BeanA的 init 方法
這是Bean B 的 testB 方法
所以得到結(jié)論: 構(gòu)造方法 > @Autowired > @PostConstruct
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Eclipse中@SpringBootTest注解報紅的解決方案
這篇文章主要介紹了Eclipse中@SpringBootTest注解報紅的解決方案,文中給出了原因分析和解決方案,并通過圖文結(jié)合的方式介紹的非常詳細,需要的朋友可以參考下2024-03-03SpringBoot+websocket實現(xiàn)消息對話功能
WebSocket是一種在Web應(yīng)用程序中實現(xiàn)實時雙向通信的技術(shù),它可以用于在線游戲、在線聊天、推送通知、實時監(jiān)控等,并且比傳統(tǒng)的輪詢技術(shù)更加高效和可靠,本文就給大家介紹基于SpringBoot+websocket實現(xiàn)消息對話功能,感興趣的小伙伴可以自己動手試一試2023-09-09Maven工程搭建spring boot+spring mvc+JPA的示例
本篇文章主要介紹了Maven工程搭建spring boot+spring mvc+JPA的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01詳解關(guān)于mybatis-plus中Service和Mapper的分析
這篇文章主要介紹了詳解關(guān)于mybatis-plus中Service和Mapper的分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09java web response提供文件下載功能的實例講解
下面小編就為大家分享一篇java web response提供文件下載功能的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01基于Spring AOP proxyTargetClass的行為表現(xiàn)總結(jié)
這篇文章主要介紹了Spring AOP proxyTargetClass的行為表現(xiàn)總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Mybatis中SqlSession下的四大對象之執(zhí)行器(executor)
mybatis中sqlsession下的四大對象是指:executor, statementHandler,parameterHandler,resultHandler對象。這篇文章主要介紹了Mybatis中SqlSession下的四大對象之執(zhí)行器(executor),需要的朋友可以參考下2019-04-04