spring的策略
- 基于pojo的輕量級和最小入侵性編程
- 通過依賴注入和面向接口實現(xiàn)松耦合
- 基于切面和慣例進行聲明式編程
- 通過切面和模板減少樣式代碼
何為依賴注入
簡單來說琳省,任何一個應(yīng)用都是有兩個或者兩個以上的類組成喷楣,這些類相互之間進行協(xié)作完成業(yè)務(wù)邏輯,通常门粪,每個對象負(fù)責(zé)管理與自己相互協(xié)作的對象的引用,所謂依賴注入就是將這些對象的關(guān)聯(lián)交給容器烹困,降低代碼的耦合度玄妈。依賴注入的最大優(yōu)點就是松耦合
如何注入一個特定的bean
創(chuàng)建應(yīng)用組件之間協(xié)作行為通常稱為裝配,spring有多種裝配bean的方式髓梅,基于xml是最常見的裝配方式拟蜻。
spring 是如何工作的
spring通過應(yīng)用上下文(ApplicationContext)裝載bean的定義并把它們組裝起來,spring應(yīng)用上下文負(fù)責(zé)bean的創(chuàng)建和組裝枯饿。
一個簡單的demo實例:spring裝載管理bean
面向切面編程(AOP)
面向切面編程的目的就是把遍布應(yīng)用在各處的功能分離出來形成可重用的組件
一個簡單的例子見上面^^^
裝配bean
- 使用構(gòu)造器傳參
<bean id="jugger" class="com.yuxi.initbean.idol.Jugger">
// 需要注意這個構(gòu)造函數(shù)必須要有
<constructor-arg value="15"/>
</bean>
- 構(gòu)造器引用對象
<bean id="poemJugger" class="com.yuxi.initbean.idol.PoeticJugger">
<constructor-arg value="16"/>
// ref 引用對象
<constructor-arg ref="poem"/>
</bean>
<bean id="poem" class="com.yuxi.initbean.idol.Sonnet29"></bean>
- 通過工廠方法創(chuàng)建bean
在很多時候我們會使用單例酝锅,但是單例沒有構(gòu)造函數(shù),那么我們怎么辦奢方?
<bean id="stage" class="com.yuxi.initbean.idol.single.init.Stage"
// 通過factory-method
factory-method="getInstance"/>
bean 的作用域
首先搔扁,需要說明的是,所有的spring bean 默認(rèn)的都是單例的
在spring中管理bean的作用域的是:scope
scope類型有: singleton ,prototype,request,session,global-session
但是蟋字,我們經(jīng)常使用的也就是singleton,prototype都很少使用稿蹲。屬性注入
通過屬性注入bean
<bean id="instrumentList" class="com.yuxi.initbean.idol.properties.Instrumentlist">
//屬性注入
<property name="instrument" ref="piano"></property>
<property name="song" value="champions"/>
</bean>
<bean id="piano" class="com.yuxi.initbean.idol.properties.Piano"/>
最小化spring XML配置
- 自動裝配
有助于減少甚至消除配置<property>元素和<constructor-arg>元素,讓spring自動識別如何裝配bean的依賴關(guān)系 - 自動檢測
比自動裝配更進一步愉老,讓spring能夠自動識別哪些類需要配置成springbean场绿,從而減少對bean元素的使用
當(dāng)自動裝配和自動檢測一起使用的時候會有神奇的效果,spring的XML文件會顯著的減少
spring的自動裝配策略:
- byName
把與bean的屬性具有相同名字或者ID的其他的bean自動裝配到bean對應(yīng)的屬性中,如果沒有不進行裝配 - byType
把與bean的屬性具有相同類型的其他的bean自動裝配到bean的對應(yīng)的屬性里焰盗,如果沒有不進行裝配 - constructor
把與bean的構(gòu)造器入?yún)⒕哂邢嗤愋偷钠渌鸼ean自動裝配到bean構(gòu)造器對應(yīng)入?yún)⒅?/li> - autodetect
首先嘗試使用constructor鏡像自動裝配璧尸,如果失敗按照byType
使用注解裝配
spring默認(rèn)是禁止使用注解的需要設(shè)置開啟注解
<context:annotation-config/>
- @Autowired
- @Resource