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

Spring執(zhí)行流程和Bean的生命周期詳解

 更新時(shí)間:2023年06月19日 09:58:40   作者:bushi橙子  
這篇文章主要介紹了Spring執(zhí)行流程和Bean的生命周期詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1、Spring執(zhí)行流程

Spring執(zhí)行流程(Bean執(zhí)行流程):1、在啟動(dòng)類(lèi)中遇到了ApplicationContext的時(shí)候就會(huì)啟動(dòng) Spring 容器 -> 2、根據(jù)容器設(shè)置的配置文件,去找相應(yīng)的配置文件; ->3、如果有base-package,那么就去base-package里循環(huán)找所有的類(lèi),看有沒(méi)有五大類(lèi)注解和方法注解; ->4、 如果有注解,進(jìn)行初始化和屬性依賴(lài)賦值

2、Bean的生命周期(重點(diǎn))

所謂生命周期是指一個(gè)對(duì)象從創(chuàng)建到銷(xiāo)毀的過(guò)程。

Bean的生命周期可分為以下5大部分:

1.實(shí)例化Bean:為Bean分配空間

2.**設(shè)置屬性:**為Bean注入屬性和裝配屬性

3.Bean初始化:

  • 實(shí)現(xiàn)各種通知方法:BeanNameAware、BeanFactoryAware、ApplicationContextAware的接口方法。
  • 執(zhí)行前置方法(BeanPostProcessor接口)
  • 執(zhí)行初始化方法(設(shè)置了才會(huì)執(zhí)行)
    • 注解方式:@PostConstruct,依賴(lài)注入后被執(zhí)行(優(yōu)先級(jí)高,主流方式)
    • xml方式:init-method ?法
  • 執(zhí)行后置方法(BeanPostProcessor接口)

4.使用Bean

5.銷(xiāo)毀Bean:@PreDestroy、DisposableBean 接??法、destroy-method。

圖示化流程:

偽代碼流程(xml方式):

public class BeanLife implements BeanNameAware, BeanFactoryAware, BeanPostProcessor {
    /*
        各種通知
     */
    @Override
    public void setBeanName(String s) {
        //s 是設(shè)置的Bean名稱(chēng)
        System.out.println("執(zhí)行了通知:BeanNameAware - > BeanName = "+s);
    }
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("執(zhí)行了通知:BeanFactoryAware");
    }
    /*
        前置方法 :默認(rèn)情況不會(huì)顯式調(diào)用
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("執(zhí)行了前置方法:postProcessBeforeInitialization");
        return bean;
    }
    /*
        初始化
     */
    public void myInit(){
        System.out.println("執(zhí)行了xml方式的初始化 - > init-method");
    }
    @PostConstruct
    public void doPostConstruct(){
        System.out.println("執(zhí)行了注解的初始化 - > PostConstruct");
    }
    /*
        后置方法 :默認(rèn)情況不會(huì)顯式調(diào)用
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("執(zhí)行了后置方法:postProcessAfterInitialization");
        return bean;
    }
    //使用Bean
    public void sayHi(){
        System.out.println("使用Bean -> sayHi()");
    }
    /*
        銷(xiāo)毀方法
     */
    @PreDestroy
    public void doPreDestroy(){
        System.out.println("執(zhí)行了銷(xiāo)毀方法:PreDestroy");
    }
}

前置方法和后置方法: 默認(rèn)不會(huì)顯式調(diào)用

? 1.可以把作用域改為prototype

xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <bean id="beanLife" class="com.spring.demo.BeanLife" scope="prototype" init-method="myInit"></bean>
</beans>

啟動(dòng)類(lèi):

public class App {
    public static void main(String[] args) {
        //此處使用ClassPathXmlApplicationContext,因?yàn)锳pplicationContext沒(méi)有銷(xiāo)毀方法
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.config.xml");
        BeanLife beanLife = context.getBean("beanLife",BeanLife.class);
       //使用bean
        beanLife.sayHi();
        //銷(xiāo)毀容器(bean也就銷(xiāo)毀了)
        context.destroy();
    }
}

執(zhí)行結(jié)果:

2.1、實(shí)例化和初始化的區(qū)別

實(shí)例化和屬性設(shè)置是java級(jí)別的系統(tǒng)“事件”,其操作過(guò)程不可人為干預(yù)和修改;而初始化是給開(kāi)發(fā)者提供的,可以在實(shí)例化之后,類(lèi)加載完成之前進(jìn)行自定義“事件”處理。

2.2、為什么先設(shè)置屬性再進(jìn)行初始化呢?

因?yàn)樵诔跏蓟A段可能會(huì)用到bean的屬性和方法;如果不先設(shè)置屬性,先初始化,那么在初始化階段使用屬性,就報(bào)錯(cuò)了;因?yàn)閷傩源藭r(shí)還沒(méi)裝配呢。

@Controller
public class BController {
    @Autowired
    private User user1;//設(shè)置屬性
    @PostConstruct//初始化
    public void say(){
        //再初始化中使用了user1里的屬性
        System.out.println(user1.toString());
    }
}
vate User user1;//設(shè)置屬性
    @PostConstruct//初始化
    public void say(){
        //再初始化中使用了user1里的屬性
        System.out.println(user1.toString());
    }
}

到此這篇關(guān)于Spring執(zhí)行流程和Bean的生命周期的文章就介紹到這了,更多相關(guān)Spring Bean生命周期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA新建JAVA項(xiàng)目簡(jiǎn)單圖文教程

    IDEA新建JAVA項(xiàng)目簡(jiǎn)單圖文教程

    這篇文章主要給大家介紹了關(guān)于IDEA新建JAVA項(xiàng)目的相關(guān)資料,IDEA是現(xiàn)在java中最為常用的編譯器,所以如何使用IDEA來(lái)創(chuàng)建java項(xiàng)目呢,這里給大家總結(jié)下,需要的朋友可以參考下
    2023-08-08
  • Java鎖機(jī)制Lock用法示例

    Java鎖機(jī)制Lock用法示例

    這篇文章主要介紹了Java鎖機(jī)制Lock用法,結(jié)合具體實(shí)例形式分析了Java鎖機(jī)制的相關(guān)上鎖、釋放鎖、隱式鎖、顯式鎖等概念與使用技巧,需要的朋友可以參考下
    2018-08-08
  • Java正則表達(dá)式API Matcher類(lèi)方法

    Java正則表達(dá)式API Matcher類(lèi)方法

    這篇文章主要介紹了Java正則表達(dá)式API Matcher類(lèi)方法,對(duì)Matcher類(lèi)的一些有用方法進(jìn)行功能對(duì)它們進(jìn)行分組展開(kāi)介紹,需要的朋友可以參考一下
    2022-06-06
  • Feign調(diào)用中的兩種Header傳參方式小結(jié)

    Feign調(diào)用中的兩種Header傳參方式小結(jié)

    這篇文章主要介紹了Feign調(diào)用中的兩種Header傳參方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • SpringBoot中的@ApiModelProperty注解作用

    SpringBoot中的@ApiModelProperty注解作用

    這篇文章主要介紹了SpringBoot中的@ApiModelProperty注解作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • SpringBoot解決jar包沖突的問(wèn)題,簡(jiǎn)單有效

    SpringBoot解決jar包沖突的問(wèn)題,簡(jiǎn)單有效

    這篇文章主要介紹了SpringBoot解決jar包沖突的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • MyBatis的MapKey注解實(shí)例解析

    MyBatis的MapKey注解實(shí)例解析

    這篇文章主要為大家介紹了MyBatis的MapKey注解實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java?中的?synchronized?關(guān)鍵字詳解

    Java?中的?synchronized?關(guān)鍵字詳解

    本文詳細(xì)介紹了Java中的synchronized關(guān)鍵字,包括其基本概念、工作原理、使用場(chǎng)景、性能優(yōu)化技巧以及常見(jiàn)問(wèn)題與解決方案,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • MyBatis配置與CRUD超詳細(xì)講解

    MyBatis配置與CRUD超詳細(xì)講解

    這篇文章主要介紹了MyBatis配置與CRUD,CRUD是指在做計(jì)算處理時(shí)的增加(Create)、讀取(Read)、更新(Update)和刪除(Delete)幾個(gè)單詞的首字母簡(jiǎn)寫(xiě)。CRUD主要被用在描述軟件系統(tǒng)中數(shù)據(jù)庫(kù)或者持久層的基本操作功能
    2023-02-02
  • 詳談cxf和axis兩種框架下的webservice客戶(hù)端開(kāi)發(fā)

    詳談cxf和axis兩種框架下的webservice客戶(hù)端開(kāi)發(fā)

    這篇文章主要介紹了詳談cxf和axis兩種框架下的webservice客戶(hù)端開(kāi)發(fā),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

水富县| 黄浦区| 榆树市| 白山市| 克拉玛依市| 丰顺县| 东乡族自治县| 开远市| 木兰县| 房产| 东至县| 桓仁| 岗巴县| 长沙县| 平利县| 南靖县| 遂宁市| 五常市| 海宁市| 内黄县| 新密市| 察雅县| 遵化市| 娄烦县| 富锦市| 体育| 迁西县| 高邑县| 丰台区| 阜城县| 佛学| 商洛市| 贺兰县| 福贡县| 马龙县| 曲麻莱县| 洛川县| 屯门区| 同心县| 泉州市| 衡东县|