日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

再见面试官:你能说说 Spring 框架中 Bean 的生命周期吗?

發(fā)布時間:2025/3/21 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再见面试官:你能说说 Spring 框架中 Bean 的生命周期吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先簡單說一下(以下為一個回答的參考模板)

1、實例化一個Bean--也就是我們常說的new;

2、按照Spring上下文對實例化的Bean進行配置--也就是IOC注入;

3、如果這個Bean已經(jīng)實現(xiàn)了BeanNameAware接口,會調(diào)用它實現(xiàn)的setBeanName(String)方法,此處傳遞的就是Spring配置文件中Bean的id值

4、如果這個Bean已經(jīng)實現(xiàn)了BeanFactoryAware接口,會調(diào)用它實現(xiàn)的setBeanFactory(setBeanFactory(BeanFactory)傳遞的是Spring工廠自身(可以用這個方式來獲取其它Bean,只需在Spring配置文件中配置一個普通的Bean就可以);

5、如果這個Bean已經(jīng)實現(xiàn)了ApplicationContextAware接口,會調(diào)用setApplicationContext(ApplicationContext)方法,傳入Spring上下文(同樣這個方式也可以實現(xiàn)步驟4的內(nèi)容,但比4更好,因為ApplicationContext是BeanFactory的子接口,有更多的實現(xiàn)方法);

6、如果這個Bean關(guān)聯(lián)了BeanPostProcessor接口,將會調(diào)用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor經(jīng)常被用作是Bean內(nèi)容的更改,并且由于這個是在Bean初始化結(jié)束時調(diào)用那個的方法,也可以被應(yīng)用于內(nèi)存或緩存技術(shù);

7、如果Bean在Spring配置文件中配置了init-method屬性會自動調(diào)用其配置的初始化方法。

8、如果這個Bean關(guān)聯(lián)了BeanPostProcessor接口,將會調(diào)用postProcessAfterInitialization(Object obj, String s)方法、;

注:以上工作完成以后就可以應(yīng)用這個Bean了,那這個Bean是一個Singleton的,所以一般情況下我們調(diào)用同一個id的Bean會是在內(nèi)容地址相同的實例,當然在Spring配置文件中也可以配置非Singleton,這里我們不做贅述。

9、當Bean不再需要時,會經(jīng)過清理階段,如果Bean實現(xiàn)了DisposableBean這個接口,會調(diào)用那個其實現(xiàn)的destroy()方法;

10、最后,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動調(diào)用其配置的銷毀方法。

結(jié)合代碼理解一下

1、Bean的定義

Spring通常通過配置文件定義Bean。如:

<?xml?version=”1.0″?encoding=”UTF-8″?><beans?xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”><bean?id=”HelloWorld”?class=”com.pqf.beans.HelloWorld”><property?name=”msg”><value>HelloWorld</value></property> </bean></beans>

這個配置文件就定義了一個標識為 HelloWorld 的Bean。在一個配置文檔中可以定義多個Bean。

2、Bean的初始化

有兩種方式初始化Bean。

1、在配置文檔中通過指定init-method 屬性來完成

在Bean的類中實現(xiàn)一個初始化Bean屬性的方法,如init(),如:

public?class?HelloWorld{public?String?msg=null;public?Date?date=null;public?void?init()?{msg=”HelloWorld”;date=new?Date();}…… }

然后,在配置文件中設(shè)置init-mothod屬性:

2、實現(xiàn) org.springframwork.beans.factory.InitializingBean接口

Bean實現(xiàn)InitializingBean接口,并且增加 afterPropertiesSet() 方法:

public?class?HelloWorld?implement?InitializingBean?{public?String?msg=null;public?Date?date=null;public?void?afterPropertiesSet()?{msg="向全世界問好!";date=new?Date();}…… }

那么,當這個Bean的所有屬性被Spring的BeanFactory設(shè)置完后,會自動調(diào)用afterPropertiesSet()方法對Bean進行初始化,于是,配置文件就不用指定 init-method屬性了。

3、Bean的調(diào)用

有三種方式可以得到Bean并進行調(diào)用:

1、使用BeanWrapper

HelloWorld?hw=new?HelloWorld(); BeanWrapper?bw=new?BeanWrapperImpl(hw); bw.setPropertyvalue(”msg”,”HelloWorld”); system.out.println(bw.getPropertyCalue(”msg”));

2、使用BeanFactory

InputStream?is=new?FileInputStream(”config.xml”); XmlBeanFactory?factory=new?XmlBeanFactory(is); HelloWorld?hw=(HelloWorld)?factory.getBean(”HelloWorld”); system.out.println(hw.getMsg());

3、使用ApplicationConttext

ApplicationContext?actx=new?FleSystemXmlApplicationContext(”config.xml”); HelloWorld?hw=(HelloWorld)?actx.getBean(”HelloWorld”); System.out.println(hw.getMsg());

4、Bean的銷毀

1、使用配置文件中的 destory-method 屬性

與初始化屬性 init-methods類似,在Bean的類中實現(xiàn)一個撤銷Bean的方法,然后在配置文件中通過 destory-method指定,那么當bean銷毀時,Spring將自動調(diào)用指定的銷毀方法。

2、實現(xiàn) org.springframwork.bean.factory.DisposebleBean接口

如果實現(xiàn)了DisposebleBean接口,那么Spring將自動調(diào)用bean中的Destory方法進行銷毀,所以,Bean中必須提供Destory方法。

圖解

總結(jié)

以上是生活随笔為你收集整理的再见面试官:你能说说 Spring 框架中 Bean 的生命周期吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。