国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

7、Bean的生命周期

這篇具有很好參考價(jià)值的文章主要介紹了7、Bean的生命周期。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Spring其實(shí)就是一個(gè)管理Bean對(duì)象的工廠。它負(fù)責(zé)對(duì)象的創(chuàng)建,對(duì)象的銷毀等。

所謂的生命周期就是:對(duì)象從創(chuàng)建開(kāi)始到最終銷毀的整個(gè)過(guò)程。

什么時(shí)候創(chuàng)建Bean對(duì)象?

創(chuàng)建Bean對(duì)象的前后會(huì)調(diào)用什么方法?

Bean對(duì)象什么時(shí)候銷毀?

Bean對(duì)象的銷毀前后調(diào)用什么方法?

1 Bean的生命周期之5步

Bean生命周期的管理,可以參考Spring的源碼:AbstractAutowireCapableBeanFactory類的doCreateBean()方法。

Bean生命周期可以粗略的劃分為五大步:

  • 第一步:實(shí)例化Bean
  • 第二步:Bean屬性賦值
  • 第三步:初始化Bean(會(huì)調(diào)用Beaninit方法。注意:這個(gè)init方法需耍自已寫,自己配。)
  • 第四步:使用Bean
  • 第五步:銷毀Bean(會(huì)調(diào)用Beandestroy 方法。注意:這個(gè)destroy 方法需耍自已寫,自己配。)

7、Bean的生命周期

public class User {

    private String name;

    public User() {
        System.out.println("第一步:無(wú)參數(shù)構(gòu)造方法執(zhí)行");
    }

    public void setName(String name) {
        System.out.println("第二步:給對(duì)象的屬性賦值");
        this.name = name;
    }

    //需要自己寫,自己配
    public void initBean() {
        System.out.println("第三步:初始化Bean");
    }

    //需要自己寫,自己配
    public void destroy() {
        System.out.println("第五步:銷毀Bean");
    }
}

init-method="initBean" destroy-method="destroy"

    <bean id="user" class="com.cjf.bean.User" init-method="initBean" destroy-method="destroy">
        <property name="name" value="zs"/>
    </bean>
@Test
public void testBeanLifeCycleFive() {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springBean.xml");
    User user = applicationContext.getBean("user", User.class);
    System.out.println("第四步:使用Bean: " + user);

    //注意:必須手動(dòng)關(guān)閉Spring容器,才會(huì)銷毀Bean
    ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext) applicationContext;
    context.close();
}

7、Bean的生命周期


2 Bean生命周期之7步

在以上的5步中,第3步是初始化Bean,如果你還想在初始化前和初始化后添加代碼,可以加入“Bean后處理器”。

編寫一個(gè)類實(shí)現(xiàn)BeanPostProcessor類,并且重寫beforeafter方法:

  • 第一步:實(shí)例化Bean

  • 第二步:Bean屬性賦值

  • 第三步:執(zhí)行“Bean后處理器”的before方法

  • 第四步:初始化Bean(會(huì)調(diào)用Bean 的init方法。注意:這個(gè)init方法需耍自已寫,自己配。)

  • 第五步:執(zhí)行“Bean后處理器”的after方法

  • 第六步:使用Bean

  • 第七步:銷毀Bean(會(huì)調(diào)用Bean的destroy 方法。注意:這個(gè)destroy 方法需耍自已寫,自己配。)

7、Bean的生命周期

測(cè)試類

@Test
public void testBeanLifeCycleFive() {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springBean.xml");
    User user = applicationContext.getBean("user", User.class);
    System.out.println("第六步:使用Bean: " + user);

    //注意:必須手動(dòng)關(guān)閉Spring容器,才會(huì)銷毀Bean
    ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext) applicationContext;
    context.close();
}

LogBeanPostProcessor

public class LogBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("執(zhí)行Bean后處理器的before方法");
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

        System.out.println("執(zhí)行Bean后處理器的after方法");
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }
}

SpringBean.xml

<!--配置Bean后處理器-->
<!--注意:這個(gè)Bean后處理器將作用于整個(gè)配置文件所有的bean-->
<bean class="com.cjf.bean.LogBeanPostProcessor"/>
<bean id="user" class="com.cjf.bean.User" init-method="initBean" destroy-method="destroy">
    <property name="name" value="zs"/>
</bean>

7、Bean的生命周期


源碼分析

3 Bean生命周期之10步

點(diǎn)位:

  • 在“Bean后處理器”before方法之

    • 檢查Bean是否實(shí)現(xiàn)類Aware相關(guān)的接口,若實(shí)現(xiàn)了則調(diào)用這些接口中的方法
    • 然后調(diào)用這些方法的目的是為了給你傳遞一些數(shù)據(jù),讓你更加方便使用。
  • 在“Bean后處理器”before方法之

    • 檢查Bean是否實(shí)現(xiàn) InitializingBean
  • 使用Bean之后,或者在銷毀Bean之前

    • 檢查Bean是否實(shí)現(xiàn) DisposableBean
  • 添加的這三個(gè)點(diǎn)位的特點(diǎn)。都是在檢查你這個(gè)Bean是否實(shí)現(xiàn)了某些特定的接口,如果實(shí)現(xiàn)了這些接口,則Spring容器會(huì)調(diào)用這個(gè)接口中的方法。

如果根據(jù)源碼跟蹤,可以劃分更細(xì)粒度的步驟,10步:

7、Bean的生命周期

是否實(shí)現(xiàn)了Aware的相關(guān)接口是什么意思?

Aware相關(guān)的接口包括:BeanNameAware、BeanClassLoaderAwareBeanFactoryAware

  • 當(dāng)Bean實(shí)現(xiàn)了BeanNameAware,Spring會(huì)將Bean的名字傳遞給Bean。
  • 當(dāng)Bean實(shí)現(xiàn)了BeanClassLoaderAware,Spring會(huì)將加載該Bean的類加載器傳遞給Bean。
  • 當(dāng)Bean實(shí)現(xiàn)了BeanFactoryAware,Spring會(huì)將Bean工廠對(duì)象傳遞給Bean。

7、Bean的生命周期文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-464761.html

public class User implements InitializingBean,DisposableBean, BeanNameAware, BeanClassLoaderAware, BeanFactoryAware {

    private String name;

    public User() {
        System.out.println("第一步:無(wú)參數(shù)構(gòu)造方法執(zhí)行");
    }

    public void setName(String name) {
        System.out.println("第二步:給對(duì)象的屬性賦值");
        this.name = name;
    }

    //需要自己寫,自己配
    public void initBean() {
        System.out.println("第四步:初始化Bean");
    }

    //需要自己寫,自己配
    public void myDestroy() {
        System.out.println("第七步:銷毀Bean");
    }

    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("Bean這個(gè)類的加載器: " + classLoader);
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("生產(chǎn)Bean的工廠是: " + beanFactory);
    }

    @Override
    public void setBeanName(String s) {
        System.out.println("Bean的名字: " + s);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean 的 afterPropertiesSet 方法執(zhí)行");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean 的 destroy 方法執(zhí)行");
    }
}

到了這里,關(guān)于7、Bean的生命周期的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Spring學(xué)習(xí)】Bean對(duì)象的作用域和生命周期,了解了這些你就真正熟悉spring框架了.

    【Spring學(xué)習(xí)】Bean對(duì)象的作用域和生命周期,了解了這些你就真正熟悉spring框架了.

    前言: 大家好,我是 良辰丫 ,我們已經(jīng)學(xué)會(huì)了Spring的存取,今天我們將一起來(lái)學(xué)習(xí)Bean對(duì)象的作用域和生命周期.?????? ??個(gè)人主頁(yè):良辰針不戳 ??所屬專欄:javaEE進(jìn)階篇之框架學(xué)習(xí) ??勵(lì)志語(yǔ)句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。 ??期

    2024年02月07日
    瀏覽(26)
  • spring工程的啟動(dòng)流程?bean的生命周期?提供哪些擴(kuò)展點(diǎn)?管理事務(wù)?解決循環(huán)依賴問(wèn)題的?事務(wù)傳播行為有哪些?

    spring工程的啟動(dòng)流程?bean的生命周期?提供哪些擴(kuò)展點(diǎn)?管理事務(wù)?解決循環(huán)依賴問(wèn)題的?事務(wù)傳播行為有哪些?

    Spring工程的啟動(dòng)流程主要包括以下幾個(gè)步驟: 加載配置文件:Spring會(huì)讀取配置文件(如XML配置文件或注解配置)來(lái)獲取應(yīng)用程序的配置信息。 實(shí)例化并初始化IoC容器:Spring會(huì)創(chuàng)建并初始化IoC容器,即ApplicationContext。在這一步,Spring會(huì)解析配置文件,并將配置的Bean實(shí)例化。

    2024年02月12日
    瀏覽(32)
  • 【Spring】—— bean生命周期

    1、初始化容器 1)創(chuàng)建對(duì)象(分配內(nèi)存) 2)執(zhí)行構(gòu)造方法 3)執(zhí)行屬性注入(set操作) 4)執(zhí)行bean初始化方法 2、使用bean 1)執(zhí)行業(yè)務(wù)操作 3、關(guān)閉/銷毀容器 1)執(zhí)行bean銷毀方法

    2024年02月02日
    瀏覽(28)
  • Spring bean 生命周期

    Spring bean 生命周期

    在互聯(lián)網(wǎng)領(lǐng)域中,Spring框架扮演著重要的角色。作為一個(gè)開(kāi)源的Java應(yīng)用程序開(kāi)發(fā)框架,Spring提供了一種靈活而強(qiáng)大的方式來(lái)構(gòu)建可擴(kuò)展的應(yīng)用程序。Spring框架中的一個(gè)重要概念是Bean,它是Spring應(yīng)用程序的基本構(gòu)建塊之一。了解Spring Bean的生命周期對(duì)于充分利用Spring框架的功能

    2024年02月11日
    瀏覽(26)
  • Spring:Bean生命周期

    Spring:Bean生命周期

    Bean 生命周期 是 bean 對(duì)象從創(chuàng)建到銷毀的整個(gè)過(guò)程。 簡(jiǎn)單的 Bean 生命周期的過(guò)程: 1.實(shí)例化(調(diào)用構(gòu)造方法對(duì) bean 進(jìn)行實(shí)例化) 2.依賴注入(調(diào)用 set 方法對(duì) bean 進(jìn)行賦值) 3.初始化(手動(dòng)配置 xml 文件中 bean 標(biāo)簽的 init-method 屬性值,來(lái)指定調(diào)用對(duì)應(yīng)的初始化方法) 4.使用

    2024年02月13日
    瀏覽(27)
  • 【Spring】Bean的作用域與生命周期詳情:請(qǐng)簡(jiǎn)述Spring的執(zhí)行流程并分析Bean的生命周期?

    【Spring】Bean的作用域與生命周期詳情:請(qǐng)簡(jiǎn)述Spring的執(zhí)行流程并分析Bean的生命周期?

    ?我們都知道,Spring框架為開(kāi)發(fā)人員提供了很多便捷,這使得開(kāi)發(fā)人員能夠更加專注于應(yīng)用程序的核心業(yè)務(wù)邏輯,而不需要花費(fèi)大量時(shí)間和精力在技術(shù)細(xì)節(jié)上。作為一個(gè)包含眾多工具方法的IoC容器,存取JavaBean是其極為重要的一個(gè)環(huán)節(jié)。本文就對(duì)Spring中的Bean的作用域和生命周

    2024年02月12日
    瀏覽(27)
  • 【spring】spring bean的生命周期

    【spring】spring bean的生命周期

    spring bean的生命周期 簡(jiǎn)介 本文測(cè)試并且介紹了spring中bean的生命周期,如果只想知道結(jié)果可以跳到最后一部分直接查看。 一、bean的創(chuàng)建階段 spring中的bean是何時(shí)創(chuàng)建的? 在spring中有一個(gè)非常重要的注解,叫做**@Scope**,這個(gè)注解是用來(lái)控制spring中的bean是否是單例的,一般情況

    2024年02月15日
    瀏覽(28)
  • Spring Bean的生命周期

    Spring Bean的生命周期

    Bean生命周期的整個(gè)執(zhí)行過(guò)程描述如下: 1、根據(jù)配置情況調(diào)用Bean構(gòu)造方法或工廠方法實(shí)例化 Bean。 2、利用依賴注入完成Bean中所有屬性值的配置注入。 3、如果Bean 實(shí)現(xiàn)了BeanNameAware 接口,則 Spring調(diào)用Bean的setBeanName()方法傳入當(dāng)前Bean的id值。 4、如果Bean實(shí)現(xiàn)了BeanFactoryAware 接口

    2023年04月22日
    瀏覽(35)
  • Spring -- Bean的生命周期

    Spring -- Bean的生命周期

    Spring容器在進(jìn)行實(shí)例化時(shí),會(huì)將xml配置的bean的信息封裝成一個(gè)BeanDefinition對(duì)象,Spring根據(jù)BeanDefinition來(lái)創(chuàng)建Bean對(duì)象,里面有很多的屬性用來(lái)描述Bean? ?BeanDefinition 中幾個(gè)重要方法如下 beanClassName:bean 的類名 initMethodName:初始化方法名稱 properryValues:bean 的屬性值 scope:作用域

    2024年02月15日
    瀏覽(35)
  • 【Spring】Spring的Bean的生命周期

    【Spring】Spring的Bean的生命周期

    作者簡(jiǎn)介:大家好,我是五度魚,一個(gè)普通的Java領(lǐng)域博主,不停輸出Java技術(shù)博客和干貨 。 座右銘:鍥而不舍,金石可鏤 。 個(gè)人主頁(yè):五度魚學(xué)Java的主頁(yè) 在 Java 中, Bean 是一個(gè)重要的概念,它代表了應(yīng)用程序中的一個(gè)對(duì)象。在開(kāi)發(fā)中,我們經(jīng)常使用 Bean 來(lái)管理對(duì)象的生命

    2024年01月16日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包