技術(shù)培訓(xùn)課件spring培訓(xùn)springioc和aop_第1頁(yè)
技術(shù)培訓(xùn)課件spring培訓(xùn)springioc和aop_第2頁(yè)
技術(shù)培訓(xùn)課件spring培訓(xùn)springioc和aop_第3頁(yè)
技術(shù)培訓(xùn)課件spring培訓(xùn)springioc和aop_第4頁(yè)
技術(shù)培訓(xùn)課件spring培訓(xùn)springioc和aop_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Spring培訓(xùn)Version 1.0 for SVWPresented by: iMonsoft Tech.Created by: Chen YueLast Update: Oct, 2013Spring簡(jiǎn)介Spring是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性是由Rod Johnson創(chuàng)建的??蚣艿闹饕獌?yōu)勢(shì)之一就是分層架構(gòu),使用者可以選擇哪個(gè)一個(gè)組件,同時(shí)為 J2EE 應(yīng)用程序開發(fā)提供集成框架。功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能。范圍:任何Java應(yīng)用Spring特點(diǎn)開源框架: 可以有效的解決企業(yè)級(jí)應(yīng)用。輕量級(jí): 從大小與開銷兩方面而言Spring都

2、是輕量的。非侵入:在應(yīng)用中,一般不需要引用springjar包里的類??刂品崔D(zhuǎn)Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,某一接口的具體實(shí)現(xiàn)類的選擇控制權(quán)從調(diào)用類中移除,轉(zhuǎn)交給第三方裁決。面向切面Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)管理)進(jìn)行內(nèi)聚性的開發(fā)。它們并不負(fù)責(zé)其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。Spring體系架構(gòu)Spring 在分層中起到作用展現(xiàn)層Webwork/strutsAction,fromBean,配置文件, 模板頁(yè)面springIoc容器,Aop,Hiber

3、n,事務(wù)管理Hibernate映射文件,DOA模式,hibernate接口業(yè)務(wù)邏輯層持久化層業(yè)務(wù)對(duì)象模型IOCIOCSpring兩大核心技術(shù)控制反轉(zhuǎn)(Ioc)/依賴注入(DI)面向切面編程Ioc簡(jiǎn)介控制反轉(zhuǎn)(Ioc)Inversion of Control依賴注入(DI)Dependency In jection 當(dāng)某個(gè)角色(比如一個(gè)java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)java實(shí)例,被調(diào)用者)協(xié)助時(shí),在傳統(tǒng)程序過(guò)程中,通常由調(diào)用者創(chuàng)建被調(diào)用的實(shí)例 , 但是在spring里 創(chuàng)建被調(diào)用者不在調(diào)用者來(lái)完成,因此稱做控制反轉(zhuǎn),創(chuàng)建被調(diào)用者通常是Spring來(lái)完成,然后注入調(diào)用者,因此也成為依

4、賴注入。Ioc簡(jiǎn)介Ioc簡(jiǎn)介Ioc 有兩大核心技術(shù)一個(gè)設(shè)計(jì)模式1,JDOM2,反射機(jī)制3,工廠模式(單例模式)演示Ioc簡(jiǎn)單實(shí)現(xiàn)示例:Spring_Ioc_demoSpring 核心jar包詳細(xì)介紹Spring3.0 jar屬性注入方式使用屬性setter方法注入使用構(gòu)造器注入使用注解注入 1. java annotation 2. spring annotationSetter 注入屬性名稱Bean引用名稱演示Ioc簡(jiǎn)單實(shí)現(xiàn)示例:Spring_Ioc_demo_2構(gòu)造方法 注入?yún)?shù)值參數(shù)類型:任意類型演示Ioc簡(jiǎn)單實(shí)現(xiàn)示例:Spring_Ioc_property_eclipse參數(shù)索引注解注

5、入修改 applicationContext.xml xmlns:context= xsi:schemaLocation= /spring-beans-3.0.xsd /spring-context-3.0.xsd/加入對(duì)注解的支持得得得java注解注入 Resource 默認(rèn)引用名稱和屬性名稱相同 Resource(name=“StudentsDao”) 按照指定名稱裝配Resource默認(rèn)按名稱裝配,當(dāng)找不到與名稱匹配的bean才會(huì)按類型裝配。Spring 注解注入Autowired 默認(rèn)按類型裝配 Autowired Qualifier(“personDaoBean”) 使用指定名稱演示

6、示例:Spring_Ioc_property_eclipse_1Spring 注解注入Autowired 默認(rèn)按類型裝配 Autowired Qualifier(“personDaoBean”) 使用指定名稱演示示例:Spring_Ioc_property_eclipse_1 ponent 注解 ponent:注解 等同于applicationContext.xml的Bean 如果 ponent 于applicationContext.xml中定義有相同name的Bean,則或者覆蓋前者。 ponent(“指定名稱”) ponent 注解Spring3.0 為我們引入組件自動(dòng)掃描機(jī)制,他可以在

7、類型掃描所有的注解 ponent、Service、Controller Repository注解類, 納入Spring容器管理 Service:業(yè)務(wù)層組件 Controller :控制層組件 Repository:數(shù)據(jù)層組件 ponent:泛指組件當(dāng)組件不好歸類時(shí)候 使用 ponent組件。演示示例:Spring_Ioc_property_eclipse_1Spring 模擬BeanFactory原理示例:Spring_BeanFactoryBean作用域.singleton 在每個(gè)Spring IoC容器中一個(gè)bean定義只有一個(gè)對(duì)象實(shí)例。默認(rèn)情況下會(huì)在容器啟動(dòng)時(shí)初始化bean,.proto

8、type 每次從容器獲取bean都是新的對(duì)象。 非單例.request .session .global session示例:Spring_Ioc_scope_eclipse Bean生命周期lazy-init:懶加載init-method :初始化destroy-method :銷毀 depends-on:依賴某個(gè)bean初始化 Bean生命周期azy-init:懶加載 默認(rèn)是:false;即在spring容器中啟動(dòng)時(shí)并加載實(shí)例化配置文件中所有的bean。當(dāng)我們每個(gè)bean都有同樣屬性 可以在配置定義全局的或 Bean生命周期init-method /destroy-method 指定Bea

9、n初始化方法 init-method 屬性屬性和銷毀方法屬性destroy-method 調(diào)用spring容器的close方法進(jìn)行關(guān)閉才執(zhí)行銷毀方法。 Bean生命周期depends-on:依賴某個(gè)bean初始化 在實(shí)例化這個(gè)Bean之前,先實(shí)例化depends-on 所指定bean示例:Spring_Ioc_LifeCycle Bean的ID屬性和name屬性區(qū)別Id:必須滿足XML命名規(guī)范,因此XML做了限定,相當(dāng)于java變量命名:不能以數(shù)字,符號(hào)打頭 ,不能有空格如123,?2,ab 等都是不規(guī)范的,spring在初始化的時(shí)候就會(huì)拋錯(cuò)。Name: 沒(méi)有限制,但是不能帶空格, 初始化的時(shí)

10、候不會(huì)拋錯(cuò)但是獲得Bean時(shí)候會(huì)拋錯(cuò)。 Bean的ID屬性和name屬性區(qū)別配置文件中不能出現(xiàn)兩個(gè)Id相對(duì),否則就會(huì)拋錯(cuò)但是可以出現(xiàn)兩個(gè)相對(duì)Name,getBean返回實(shí)例,后一個(gè)返回,前一個(gè)名稱重復(fù)的被覆蓋Name:屬性可以用逗號(hào)隔開指定多個(gè)名字 如 前提 必須是singleton如果Id和name都沒(méi)有指定,全類名做為name可以通過(guò)com.sp.dao.impl.StudentsDaoImpl” 獲得實(shí)例 抽象Bean繼承如果多個(gè)bean存在相同的配置信息,spring允許我們定義一個(gè)父,子將自動(dòng)繼承父的配置信息。 動(dòng)態(tài)代理代理模式是常用的java設(shè)計(jì)模式,代理類和委托類有同樣的接口,代

11、理類主要負(fù)責(zé)為委托類預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類 ,以及事后的處理消息,一個(gè)代理類的對(duì)象和一個(gè)委托對(duì)象的關(guān)聯(lián),代理類本身真正產(chǎn)生服務(wù),而是通過(guò)調(diào)用委托類對(duì)象相的關(guān)方法,來(lái)提供服務(wù)。 動(dòng)態(tài)代理動(dòng)態(tài)代理類的字節(jié)碼在程序運(yùn)行時(shí)由java反射機(jī)制動(dòng)態(tài)生成,無(wú)需手寫代碼完成,動(dòng)態(tài)代理不簡(jiǎn)化編程工作而且提高了擴(kuò)展性,可以生成任意類型代理類。動(dòng)態(tài)代理包含一個(gè)類一個(gè)接口: public interface InvocationHandlerpublic Object invoke(Object proxy, Method method, Object args) throws Throwable

12、參數(shù)說(shuō)明:Object proxy:指被代理的對(duì)象Method method:要調(diào)用方法Object args:方法調(diào)用時(shí)需要的參數(shù) 動(dòng)態(tài)代理Proxy類 完成代理的操作類,可以通過(guò)此類為一個(gè)或多個(gè)接口動(dòng)態(tài)生成實(shí)現(xiàn)類,提供操作方法:Public static Objecet newProxyInsatance (ClassLoader loader, Class interfaces, InvocationHandler h) throws legalArgrumentException參數(shù)說(shuō)明:ClassLoader loader :類加載器Class interfaces :得到所有接口I

13、nvocationHandler h :得到接口子類實(shí)例 動(dòng)態(tài)代理類加載器主要有三種類加載器Booststrop ClassLoader :采用C+編寫 一般開發(fā)看不到Extends ClassLoader:擴(kuò)展器加載類 一般對(duì)應(yīng)jrelibext目錄的類App ClassLoader: (默認(rèn))加載classpath指定類,是最常用的加載器示例:Spring_Ioc_Proxy 動(dòng)態(tài)代理動(dòng)態(tài)代理是依靠接口實(shí)現(xiàn)的,如果沒(méi)有實(shí)現(xiàn)接口則不能用動(dòng)態(tài)代理,如果使用cglib動(dòng)態(tài)代理。使用動(dòng)態(tài)代理好處:對(duì)請(qǐng)求進(jìn)行任何處理什么情況下使用動(dòng)態(tài)代理:不允許直接訪問(wèn)某些類;對(duì)訪問(wèn)要做特殊處理等Cglib是針對(duì)類

14、來(lái)實(shí)現(xiàn)代理的,他的原理是對(duì)指定的目標(biāo)類生成一個(gè)子類,并覆蓋其中的方法實(shí)現(xiàn)增強(qiáng),因?yàn)槭抢^承,所以不能對(duì)final修飾的類進(jìn)行代理。 CGlib動(dòng)態(tài)代理MethodInterceptor接口public Object intercept(Object proxy, Method method, Object args,MethodProxy methodProxy) throws Throwable參數(shù)說(shuō)明:Object proxy:代理對(duì)象Method method :攔截的方法 Object args :方法參數(shù)MethodProxy methodProxy: 攔截器 CGlib動(dòng)態(tài)代理pub

15、lic class CGLIBProxy implements MethodInterceptor private Object targetObject;/代理的目標(biāo)對(duì)象public Object createProxyInstance(Object targetObject)this.targetObject = targetObject;Enhancer enhancer = new Enhancer();/該類用于生成代理對(duì)象enhancer.setSuperclass(this.targetObject.getClass();/設(shè)置父類enhancer.setCallback(thi

16、s);/設(shè)置回調(diào)用對(duì)象為本身return enhancer.create();public Object intercept(Object proxy, Method method, Object args,MethodProxy methodProxy) throws Throwable return methodProxy.invoke(this.targetObject, args);CGLIB可以生成目標(biāo)類的子類,并重寫父類非final修飾符的方法。 AOP 簡(jiǎn)介AOP (Aspet Oriented Programming) 他是一種設(shè)計(jì)模式,用于實(shí)現(xiàn)系統(tǒng)中某一個(gè)方面的應(yīng)用用于:日志

17、攔截 授權(quán)認(rèn)證 事務(wù)攔截 方法緩存 數(shù)據(jù)審計(jì) AOP 簡(jiǎn)介邏輯處理邏輯處理邏輯處理日志管理安全檢查事務(wù)處理授權(quán)管理模塊軟件管理模塊用戶管理模塊AOP 簡(jiǎn)介切面(Aspect) 切面由切點(diǎn)和增強(qiáng)(引介)組成,它既包括了橫切邏輯的定義,也包括了連接點(diǎn)的定義,spring AOP就是負(fù)責(zé)實(shí)施 切面的框架,它將切面定義的橫切連接點(diǎn)(Joinpoint):程序執(zhí)行的某個(gè)特定位置:比如類開始初始化前、類初始化后、某個(gè)方法調(diào)用前、調(diào)用后等。一個(gè)類或一段程序代碼擁有的一些具有邊界性質(zhì)的特定切點(diǎn)(Pointcut):匹配連接點(diǎn)(Joinpoint)的斷言。連接點(diǎn)相當(dāng)于數(shù)據(jù)記錄,切點(diǎn)相當(dāng)于查詢條件,一個(gè)切點(diǎn)可以匹配多個(gè)連接點(diǎn)。通知增強(qiáng)(Advice):在攔截Joinpoint之后,通知分為前置通知、后置通知、異常通知、最終通知、環(huán)繞通知。目標(biāo)對(duì)象(Target): 代理的目標(biāo)對(duì)象織入(Weaving):將增強(qiáng)添加到對(duì)目標(biāo)類具體連接點(diǎn)上的過(guò)程。引入(Introduction)引入是一種特殊的增強(qiáng),為類添加一些屬性和方法。通過(guò)它可以動(dòng)態(tài)的為業(yè)務(wù)類增加接口的實(shí)現(xiàn)邏輯,讓業(yè)務(wù)類成為這個(gè)接口的實(shí)現(xiàn)類。 AOP實(shí)現(xiàn)方式代理實(shí)現(xiàn): 示例:Spring_Aop_Proxy自動(dòng)代理實(shí)現(xiàn):示例:Spring_Aop_AutoProxyAspectJ方式實(shí)現(xiàn): 示例:Spring_Aop_Aspect

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論