最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中@PostConstruct注解的使用講解

 更新時(shí)間:2023年11月02日 11:35:15   作者:夢(mèng)想不會(huì)滅  
這篇文章主要介紹了Spring中@PostConstruct注解的使用講解,被@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器執(zhí)行一次,PostConstruct在構(gòu)造函數(shù)之后執(zhí)行,init()方法之前執(zhí)行,PreDestroy()方法在destroy()方法之后執(zhí)行,需要的朋友可以參考下

1、定義

從JavaEE5規(guī)范開始,Servlet中增加了兩個(gè)影響Servlet生命周期的注解,@PostConstruct和@PreDestroy,這兩個(gè)注解被用來修飾一個(gè)非靜態(tài)的void()方法。

2、執(zhí)行順序及其使用場(chǎng)景

被@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器執(zhí)行一次。PostConstruct在構(gòu)造函數(shù)之后執(zhí)行,init()方法之前執(zhí)行。PreDestroy()方法在destroy()方法之后執(zhí)行

在這里插入圖片描述

從依賴注入的字面意思可以知道,要將對(duì)象p注入到對(duì)象a,那么首先就必須得生成對(duì)象p和對(duì)象a,才能執(zhí)行注入。

所以,如果一個(gè)類A中有個(gè)成員變量p被@Autowried或@Resource注解,那么成員變量p注入是發(fā)生在a的構(gòu)造方法執(zhí)行完之后的。

如果想在生成對(duì)象時(shí)完成某些初始化操作,而偏偏這些初始化操作又依賴于依賴注入,那么這個(gè)初始化操作就無法在構(gòu)造函數(shù)中實(shí)現(xiàn)。

這時(shí),可以使用@PostConstruct 注解一個(gè)方法來完成初始化,被@PostConstruct注解的方法將會(huì)在依賴注入完成后被自動(dòng)調(diào)用。 所以,@PostConstruct的執(zhí)行順序如下:

靜態(tài)方法 >> Constructor >> @Autowired >> @PostConstruct

3、代碼演示

我們知道:如果對(duì)象p注入到對(duì)象a,在服務(wù)啟動(dòng)時(shí),會(huì)先執(zhí)行p的構(gòu)造方法,在執(zhí)行a的構(gòu)造方法。 那么如果對(duì)象p注入到對(duì)象a,且在對(duì)象p和對(duì)象a中都有@PostConstruct注解,那么在服務(wù)啟動(dòng)時(shí),他的初始化順序是什么呢,我們做個(gè)小測(cè)試,相關(guān)代碼如下:

@Service
public class RoleService {

    static {
        System.out.println("RoleService static");
    }

    public RoleService(){
        System.out.println("RoleService Constructor");
    }

    @PostConstruct
    public void init(){
        System.out.println("RoleService PostConstruct");
    }

}
@Service
public class UserService {
    @Resource
    private RoleService roleService;

    static {
        System.out.println("UserService static");
    }

    public UserService(){
        System.out.println("userService Constructor");
    }

    @PostConstruct
    public void init(){
        System.out.println("UserService PostConstruct");
    }
    
}

我們可以看到,RoleService注入到了UserService中,我們啟動(dòng)程序,輸出結(jié)果如下:

RoleService static
RoleService Constructor
RoleService PostConstruct
UserService static
userService Constructor
UserService PostConstruct

結(jié)論:

如果對(duì)象p注入到對(duì)象a,且在對(duì)象p和對(duì)象a中都有@PostConstruct注解,那么在服務(wù)啟動(dòng)時(shí),他的初始化順序是: p static -> p Constructor -> p PostConstruct -> a static -> a Constructor -> a PostConstruct

需要注意:

Spring有默認(rèn)的類加載順序 如果UserService注入到了RoleService,類加載順序默認(rèn)是先加載RoleService,所以它的執(zhí)行順序就是 RoleService static -> RoleService Constructor -> UserService static -> UserService Constructor -> UserService PostConstruct -> RoleService PostConstruct

到此這篇關(guān)于Spring中@PostConstruct注解的使用講解的文章就介紹到這了,更多相關(guān)Spring中@PostConstruct注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

廉江市| 延长县| 郓城县| 富顺县| 淮安市| 宁波市| 镇平县| 平度市| 庆元县| 内黄县| 广宗县| 两当县| 兴和县| 天峻县| 同仁县| 马山县| 依兰县| 开远市| 甘南县| 泌阳县| 青冈县| 宁阳县| 基隆市| 福建省| 潍坊市| 邵阳县| 古浪县| 赣榆县| 全州县| 左云县| 永吉县| 安义县| 保山市| 融水| 彰化市| 河南省| 安多县| 睢宁县| 阳原县| 毕节市| 安西县|