1. 程式人生 > >spring的一些配置和重要的介面和類

spring的一些配置和重要的介面和類

spring的配置檔案

通常是applicationContext.xml(具體的bean配置會在後面內容中詳解)

setter方法注入:

<property name=“” value=“jake”>
或者<property name=“”>
  <value>xxx</value>

 

集合注入:

集合的注入都是給<property>新增子標籤

例子:陣列:
<array>

<value>zzz</value>
<value>zzz</value>
<value>zzz</value>

</array>


map:

<map>
<entry key=“” value="">
</map>

property:

<property name="">
<props>
<prop key="xx"> </prop>
</props>

</property>

 

spring的基本使用(第一個特徵ioc控制反轉):

//獲取一個spring容器介面的例項:(用此方法獲取的bean是實時bean)

ApplicationContext applicationContent= new classpathxmlapplicationcontent(xml);

//根據一個id獲得一個bean容器

U u= (U)applicationContent.getBean("id號");

spring的另一個重要特徵di:依賴注入

依賴:一個物件需要使用另一個物件
注入:通過setter方法進行另一個物件例項設定

<property>用於進行屬性注入
name:bean的屬性名,通過setter方法獲得
ref:另一個bean的id值的引用

幾個重要的介面和類:

beanFactory(懶載入):這是一個工廠,用於生產任意bean 載入xml執行位置--》web-inf/class/xml
application是beanFactory的子介面功能更強大(當配置檔案被載入,就進行物件的例項化,這就是bean的自動裝配,不是懶載入)
(國際化處理,事件傳遞,bean自動裝配,各種不同應用層的context實現)

想要使用延時載入的話 則使用BeanFactory介面

BeanFactory benaFactory= new XmlBeanFactory(new ClassPathResource(xmlpath));

 


裝配bean的三種例項化方式

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

靜態工廠:

常用與spring整合其他框架(工具)

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

<bean id=“” class="工廠全限定類名" factory-method=“靜態工廠中的方法”>

例項工廠:

與靜態工廠不一樣的是bean工廠不需要是static

<bean id=“” class="工廠全限定類名" factory-method="??” factory-bean=“??”>

factory-bean 確定工廠例項
factory-method 確定普通方法


spring的生命週期

1.初始化和銷燬:

目標方法執行前執行後,將進行初始化或銷燬
<bean id="" class="" init-method="" destory-method="">

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

destory-method銷燬方法必須是單例的

bean介面.close()方法來銷燬例項

 

2.beanpostprocessor後處理

spring提供一種機制,只要實現此介面beanpostPostprocessor,並將實現類提供給Spring容器,spring容器將自動在初始化(init方法)前before(),後執行after()。

 

3.postprocessbeforeinit/afterinit處理

spring提供工廠鉤子,用於修改例項物件,可以生成代理物件,是aop底層。將a的例項物件傳遞給後處理,可以生成代理物件並返回(postprocessbeforeinit。。。)

在init後方法中生成代理,因為在前方法中不會執行init方法(除非你在介面中聲名全了實現類中的方法)

可以在init後面加代理,這也是spring可以事務管理的原因

 



spel表示式

對property進行統一程式設計:
<property name=“” value=“”>
#{benaID}:另一個bean的引用
#{beanId.property}:操作資料

#{beanId.property}通過另一個bena來獲得屬性,呼叫方法

#{beanId.property?.toUpperCase()}如果物件不為null,將呼叫方法