Spring是一個輕量級控制反轉(IoC)和麪向切面(AOP)的容器框架。
IOC的反轉 :
創建對象這份工作由我們自己反轉給了Spring幫我們執行。
IOC的控制 :
由Spring幫我們負責創建銷燬對象,掌握對象的生命週期,在我們需要對象時,向Spring申請即可。
DI 依賴注入 :
將值通過配置的方式爲變量初始化/賦值(注入)
> 注入方式: set 方法注入,構造注入, 屬性注入
> 值: 八大數據類型,
String,自定義屬性。
Spring 配置
XML 配置
> Bean 元素:交由Spring 管理的對象都要配置在 bean 標籤中
bean 標籤的創建爲:空參構造,靜態工廠,動態工廠
> name屬性: 起一個名字來辨識bean
> class屬性:表示被管理對象的全包名,Spring會通過包名創建對象。eg:club.12zw.demo.User
> scope屬性:
singleton:單例模式:只允許創建一個對象。(默認採用)
prototype:每一次獲取一個對象,都是不同的。
request:生命週期與request的生命週期相同。
session:生命週期只存在一次會話當中。
>init-method: 容器創建對象之後調用的方法。如:User 中的指定方法
>desotry-method: 容器銷燬對象之前調用的方法。如:User 中的指定方法
>AlpplicationContext 默認情況下會再創建時創建配置表中所有bean對象,如果關閉,可以使用 --懶加載的方式(lazy-init = "true")--
屬性注入
1.set 方法注入:再User bean中創建set,get方法,然後再xml配置中設置相關屬性。
<bean name="user" class="club.12zw.demo.User">
<propetry name="u_id" value="1"/>
<propetry name="u_name" value="comi"/>
<propetry name="u_password" value="password"/>
</bean>
2.注入引用類型 (ref)
<bean name="user" class="club.12zw.demo.User">
<propetry name="u_id" value="1"/>
<propetry name="u_name" value="comi"/>
<propetry name="u_password" value="password"/>
<propetry name="u_pet" ref="dog" /> <<<-----
</bean>
<bean name="dog" class="club.12zw.demo.pet"> <<<-----
<propetry name="u_petType value="fw"/>
<propetry name="color" value="black"/>
</bean>
3.構造方法注入
再 User 中添加方法
bean --> name 爲 構造方法的參數名稱。 eg:user1
如果有兩個相同的構造方法,但是傳遞的值不同(重載),則需要指定參數類型。
contsructor-arg --> type 爲指定參數類型。 eg:java.lang.Integer
contsructor-arg --> index 爲指定參數位置。
<contsructor-arg name="u_name" value="666" type="java.lang.Integer" index="0"/>
<bean name="user1" class="club.12zw.demo.User">
<contsructor-arg name="u_name" value="siki"/>
<contsructor-arg name="u_pet" ref="dog" />
</bean>
4.複雜注入
註解開發
掃描改包下所有子包及所有註解
二者等價:component 相當於註解上的bean 配置
常用註解:
@Controller("User") // 對應web層
@Service("User") //對於服務層
@repository("User") //對於dao層
@Component("User")
@Scope(scopeName="prototype") //設置單例還是多例
@PostConstruct() //再構造方法後調用
@PreDesotry() //再銷燬方法之前調用
@Value(value = "1") // 屬性注入,可以在字段上,也可以再set方法上(推薦再set方法上使用)
@Autowired() //自動裝配,但是當有多個註解時,就無法使用
@Resoure(name="cat") //指定裝載
junit 和 spring 測試
再測試類上添加註解@Runwith(SpringJUnit4ClassRunner.class) //只用junit進行測試,幫助我們創建容器
再讀取配置文件@ContextConfiguration(“classpath:xxxxx.xml”)