spring是J2EE應用程序框架,是輕量級的IOC和AOP的容器框架,主要是針對javaBean的生命周期進行管理的輕量級容器,可以單獨使用,也可以和Struts框架,Hibernate框架等組合使用。
2.Spring框架的優(yōu)缺點:優(yōu)點:
輕量級的容器框架沒有侵入性
使用IoC容器更加容易組合對象直接間關系,面向接口編程,降低耦合
Aop可以更加容易的進行功能擴展,遵循ocp開發(fā)原則
創(chuàng)建對象默認是單例的,不需要再使用單例模式進行處理
缺陷:業(yè)務功能依賴spring特有的功能,依賴與spring環(huán)境
3.Spring六大模塊:IOC (InversionOfControl)控制反轉(zhuǎn) IOC容器 = BeanFactory + bean.xml
負責對象創(chuàng)建反轉(zhuǎn),在spring中BeanFacotory是IOC容器的核心接口,負責實例化,定位,配置應用程序中的對象及建立這些對象間的依賴。XmlBeanFacotory實現(xiàn)BeanFactory接口,通過獲取xml配置文件數(shù)據(jù),組成應用對象及對象間的依賴關系。
DIdependencyinjection依賴注入(處理對象的依賴關系!如:創(chuàng)建Action后需要處理Action依賴Service)
spring中有三種注入方式,一種是set注入,一種是接口注入,另一種是構(gòu)造方法注入。
Aopaspectobjectprogram面向切面編程!
AOP就是縱向的編程,如業(yè)務1和業(yè)務2都需要一個共同的操作,與其往每個業(yè)務中都添加同樣的代碼,不如寫一遍代碼,讓兩個業(yè)務共同使用這段代碼。
spring中面向切面變成的實現(xiàn)有兩種方式,一種是動態(tài)代理,一種是CGLIB,動態(tài)代理必須要提供接口,而CGLIB實現(xiàn)是有繼承。
4.Spring開發(fā)步驟:1.下載Spring源碼并引入Jar文件:(3.0之后,spring源碼中只有spring的功能,如果spring有依賴其他包,需要單獨下載)
commons-logging-1.1.3.jar 【需要單獨下載, spring 依賴的日志包】 spring-beans-3.2.5.RELEASE.jar【3.2 源碼:Spring bean節(jié)點支持】 spring-context-3.2.5.RELEASE.jar【3.2 源碼:上下文支持】 spring-core-3.2.5.RELEASE.jar【3.2 源碼:核心功能】 spring-expression-3.2.5.RELEASE.jar 【3.2 源碼:Spring 表達式】
2.配置application.xml/bean.xml (名字可以取其中一個)
將需要創(chuàng)建的對象都在Spring容器中進行配置,對應的名稱空間和約束可以去源碼中拷貝!
1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="http://www.springframework.org/schema/beans"3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4 xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans5 http://www.springframework.org/schema/beans/spring-beans.xsd">6 7 <!-- 創(chuàng)建一個User對象 -->8 <bean id="user" class="cn.itcast.b_ioc.User"></bean>9 </beans>
3.創(chuàng)建IOC容器并通過IOC容器創(chuàng)建對象!
1.通過無參或者有參構(gòu)造函數(shù)創(chuàng)建對象;
2.使用工廠類創(chuàng)建對象;
5.詳解Spring創(chuàng)建Bean:1 <bean id="user" class="cn.itcast.b_ioc_bean.User" scope="singleton" lazy-init="true" init-method="init" destroy-method="destroy"></bean>
5.1.通過scope指定bean是單例還是多例:
scope="singleton"單例,啟動時候創(chuàng)建所有單例的bean
scope="prototype" 多例, 啟動時候不會創(chuàng)建,【每次從容器獲取實例時候,都會創(chuàng)建一個新的bean】
當創(chuàng)建Dao/Service時候,可以指定singleton, 也可以不指定,默認就是單例!創(chuàng)建Action時候必須指定!
5.2. 延遲初始化 lazy-init="false" 不延遲初始化 lazy-init="true" 表示:在初始化容器時候,沒有創(chuàng)建單例的bean; 在第一次從容器中獲取時候創(chuàng)建實例;如果再次獲取,獲取是上次創(chuàng)建的單例的對象5.3. 初始化與銷毀方法 init-method=" " 初始化方法, 創(chuàng)建完對象之后執(zhí)行初始化方法; 如果是單例,執(zhí)行一次; 多例就執(zhí)行多次 destroy-method=" " 當調(diào)用ClassPathXmlApplicationContext對象的destroy方法的時候執(zhí)行!
6.Bean的生命周期:6.1.先創(chuàng)建IOC容器對象 6.2.每次從容器獲取bean,才創(chuàng)建對象 6.3.創(chuàng)建完對象后,執(zhí)行初始化方法 (每次創(chuàng)建對象后執(zhí)行) 6.4.對象創(chuàng)建完畢 6.5.容器銷毀,執(zhí)行destroy方法
新聞熱點
疑難解答