spring筆記6 spring IOC的中級知識

1,spring ioc的總體流程,xml配置java

 

spring ioc初始化的流程結合上圖
步驟編號 完成的工做
1 spring容器讀取配置文件,解析稱註冊表
2 根據註冊表,找到相應的bean實現類實例化bean
3 把實例化以後的bean放到spring容器中
4 spring開放準備好的bean供程序使用

 

配置方法:web

常見的自定義命名空間:spring

增長自定義的命名空間很easy,若是所示,獨家祕籍····數據庫

 

spring的常見的自定義命名空間
簡稱 說明
beans 配置bean
aop aop的配置
tx 聲明式事物
mvc mvc的配置
util 簡化某些標準配置
jee java EE的EJB,jndi
jdbc 配置數據庫提供的schema
jms jms配置
lang 支持Jruby,Groovy的配置
oxm xml映射的配置
task 任務調度的配置
tool 有用工具定義的配置

 

 

2,依賴注入,注入參數,方法注入緩存

 通常配置bean指定id,name不推薦使用;ruby

依賴注入主要有兩種,即屬性注入和構造函數注入,工廠方法注入,具體選擇視實際狀況來;session

屬性注入:在xml中的bean節點中,經過<property name="xxx" value="xxx"/> 屬性設置方法的前兩個字符要所有大寫或者小寫;mvc

構造函數注入:在xml中的bean節點中,經過<constructor-arg index="n" type="XXX" value="XXX"/>,對於構造函數的循環依賴,把其中一個改形成屬性注入便可解決;函數

工廠方法注入:經過屬性 factory-bean factory-method指定工具

 

注入參數:

字面值直接使用<value>來指定,特殊字符&xxx;來解決;好比大於 &lt; 小於 &gt; 連字符 &amp; 單引號 &apos;雙引號   &quot;

引用<ref bean="xxx"/> 引用存在於本配置文件或者父配置文件中;

內部引用可直接定義bean

特殊的null值經過<null>來指定

支持級聯的屬性賦值;

集合類型支持到List,Set,Map,Properties

強類型同map

集合還可經過 merge 屬性指定合併,可經過util命名空間來簡化集合配置,使用p空間來簡化屬性配置;

 

自動裝配:在bean中指定 autowire 類型能夠是 byName,byType,constructor,autodetect,不推薦自動裝配

 

方法注入:

lookup,通常用在單例的屬性是原型的實例,視狀況須要是否引入CGLib依賴

<replace-method  name="方法名" replacer="替換接口實現類"> 能夠替換方法,接口是MethodReplacer;

 

 3,bean之間的關係

 

bean之間的關係分三類,分別是繼承,依賴,引用

繼承經過在父bean中加個 abstract屬性,子bean中加一個parent屬性;

依賴經過增長屬性 depends-on="xxx"

引用經過<idref bean="xxx">

 

4,整合配置文件,bean的做用域,FactoryBean

 

經過在主配置文件中增長<import resource="classpath:XXXX"/> 來整合

 

bean的做用域,若是是web應用,除了singleton和prototype以外還有request,session,globalSession

 

singleton是單例無狀態的,spring的dao均可以採用單例的模式,spring放在了容器的緩存池裏面;

prototype每次都會實例化一個對象;

要在web環境下使用其它的三種做用域,須要在web.xml中配置一個RequestContextListener;

若是單例的或者原型的實例依賴web做用域的某個實例,在web做用的bean裏面增長<aop:scoped-proxy/>

 

若是實例化比較複雜,可使用FactoryBean來定義實例;

 

5,基於註解的配置

 

四類註解來標識bean

@Component 標識通常的bean

@Repository 標識dao

@Service       標識service

@Controller   標識控制層

 

配置掃描:<context:compnent-scan base-package="xxx" resource-patter="xxx"> 它的過濾方式有多種,annotation,assignable,aspectj,regex,custom;

 

自動注入:

@Autowired 有required屬性標識缺失是否報錯,Qualifier標識名稱;可對屬性和方法進行標註;

其它的好比:@Inject @Resource功能同樣,可是功能沒它強大,可忽略;

 

生命週期的支持:經過@PostConstruct 來定義init-method ,經過@PreDestroy來定義 destroy-method

 

@Scope來定義做用域

@Value來引用其它的bean的屬性

@Lazyl來定義是否延遲加載

 

6,基於java類的配置

 這裏省略,用的很少;

7,小結

最經常使用的是採用xml配置第三方的bean工具,本應用開發採用註解來配置;

相關文章
相關標籤/搜索