1. 程式人生 > >裝配bean基於XML

裝配bean基於XML

1.例項化方式

3種例項化bean的方式:預設構造、靜態工廠、例項工廠

預設構造:<bean id="" class="">//預設構造(必須提供預設構造)

靜態工廠:常用於spring整合其他框架(工具)

用於生成例項物件,所有的方法必須是static

<bean id="" class="工廠全限定類名(包名+類名)" factory-method="靜態方法">

例項工廠:

必須先有工廠例項物件,通過例項物件建立物件,提供所有的方法都是非靜態的

//建立工廠例項

<bean id="工廠例項id名" class="全限定類名"></bean>

//獲取service

//factory-bean:確定工廠例項

//factory-method:確定普通方法

<bean id="...service" factory-bean="工廠例項id名" factory-method="方法名"></bean>

此處有一個問題:

普通的bean都是<bean id="" class="FB"></bean>,spring直接建立A例項,並返回()//相當於FB fb = new FB();return fb

FactoryBean是一個特殊的bean,它具有工廠生產物件的能力,只能生成特定的一個物件

bean必須使用FactoryBean介面,此介面提供方法getObject()用於獲得特定bean

<bean id="" class="FB">先建立FB例項,然後呼叫getObject(),並返回方法的返回值

相當於FB fb = new FB();return fb.getObject()

BeanFactory和FactoryBean對比:

BeanFactory:工廠,用於生成任意bean,也就是之前用的普通bean

FactoryBean:是特殊的bean,它是用來生成另一個特定+的bean

spring作用域:scope="singleton/prototype/request/session/global seesion"

初始化和消亡:

init-method:用於配置初始化方法,準備資料

destroy-method :用於配置銷燬方法,清理資源

目標方法執行前執行後,將進行初始化或銷燬

<bean id="" init-method="初始化方法名" destroy-method="銷燬方法名">

注:銷燬方法執行有兩個條件,一是容器必須close,二是必須是單例的(即在配置中scope="singleton")

String xmlPath = "..../beans.xml";

Application application = new ClassPathXmlApplicationContext(xmlPath);

application .close()

//applicationContext.getClass().getMethod("close").invoke(applicationContext);

 

BeanPostProcessor後處理Bean

Spring提供一種機制,只要實現此埠BeanPostProcessor,並將實現類提供給spring容器,sring容器將自動執行,在初始化方法前執行

before(),在初始化後執行after()

Spring提供工廠勾子,用於修改例項物件,可以生成代理物件,是AOP底層

模擬過程:

A a = new A();

a = B.before(a);

a.init();

a = B.after(a);(前面的相當於是代理a) //將a的例項物件傳遞給後處理bean,可以生成代理物件並返回

a.add();//生成代理物件,目的是在目標方法前後執行(例如:開啟事務、提交事務)

a.destroy();