目錄
一、spring的ioc與aop原理
二、代理模式:
三、靜態(tài)代理
四、動(dòng)態(tài)代理
五、實(shí)際的操作
六、動(dòng)態(tài)代理的實(shí)現(xiàn):
七、什么是AOP
八、主流的AOP框架:
九、術(shù)語(yǔ):
十、通知的五種類(lèi)型:
十一、AOP的優(yōu)點(diǎn):
十二、AOP開(kāi)發(fā)流程
一、spring的ioc與aop原理
- 核心概念:控制反轉(zhuǎn)(IOC)/(DI),面向切面(AOP)
????????IOC和DI:本質(zhì)相同只是不同的角度描述而已。
????????IOC:
????????????????使用Spring框架之后對(duì)象的實(shí)例不再由調(diào)用者來(lái)創(chuàng)建,而是直接由Spring容器來(lái)創(chuàng)建,Spring容器會(huì)負(fù)責(zé)控制程序之間的關(guān)系,而不是調(diào)用者的程序代碼直接控制??刂茩?quán)由應(yīng)用程序轉(zhuǎn)移到Spring容器,控制權(quán)發(fā)生了反轉(zhuǎn)。
????????DI:
????????????????從Spring容器的角度來(lái)看,Spring容器負(fù)責(zé)被依賴(lài)對(duì)象賦值給調(diào)用者的長(zhǎng)遠(yuǎn)變量,這相當(dāng)于為調(diào)用者注入了它依賴(lài)的實(shí)例,這就是Spring的依賴(lài)注入。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-445723.html
aop(面向切面編程)?原理:
????由于組件是在運(yùn)行期間組裝、調(diào)用的,因此Spring即可以在執(zhí)行完A組件后執(zhí)行組件B,也可以執(zhí)行完A組件后執(zhí)行B組件前再執(zhí)行C組件。也就是說(shuō),將C組件插入到A組件與B組件之間。
????如果把A、B、C看成是切面,這就是AOP、面向切面的編程。面向切面編程的思想就是在執(zhí)行某些代碼前執(zhí)行另外的代碼,使程序更靈活、擴(kuò)展性更好,可以隨便地添加、刪除某些功能。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-445723.html

-
二、代理模式:
-
概念
-
是程序設(shè)計(jì)的一種
-
代理模式就是為其他的對(duì)象提供一種代理以控制這個(gè)對(duì)象的訪問(wèn)某些情況下每個(gè)對(duì)象不適合或者不能直接引用另一個(gè)對(duì)象二代理對(duì)象可以在客戶(hù)端與目標(biāo)對(duì)象之間起到中介的作用
-
-
組成:
-
抽象角色:【行為】
-
通過(guò)接口或者抽象類(lèi)聲明真實(shí)角色的實(shí)現(xiàn)(業(yè)務(wù)方法)
-
-
代理對(duì)象【連接真實(shí)角色的橋梁】
-
實(shí)現(xiàn)抽象角色,是真實(shí)角色的代理,通過(guò)真實(shí)的?角色的業(yè)務(wù)邏輯方法,來(lái)實(shí)現(xiàn)抽象方法,附加自己的操作。
-
-
真實(shí)角色【需要被代理的對(duì)象】
-
實(shí)現(xiàn)抽象角色,定義鎮(zhèn)海寺的角色搜要實(shí)現(xiàn)的業(yè)務(wù)邏輯,提供代理角色調(diào)用
-
-
-
-
三、靜態(tài)代理
-
由我們創(chuàng)建或者工具生成的代理,字編譯代理類(lèi),所謂的驚濤代理就是在程序執(zhí)行之前九已經(jīng)存愛(ài)的代理類(lèi),代理類(lèi)和委托類(lèi)的關(guān)系在運(yùn)行之前就已經(jīng)確定了。
-
-
四、動(dòng)態(tài)代理
-
動(dòng)態(tài)代理憑借靈活性子框架中應(yīng)用非常的廣泛,是代理模式的一種
-
是在實(shí)現(xiàn)階段不關(guān)心代理類(lèi),而是在運(yùn)行階段才指定哪一個(gè)對(duì)象,這就意味著不關(guān)心代理類(lèi)是如何實(shí)現(xiàn)的,不需要再寫(xiě)代理類(lèi)。
-
-
五、實(shí)際的操作
???????-
代理類(lèi)中沒(méi)有真實(shí)的實(shí)現(xiàn)接口,而是調(diào)用目標(biāo)類(lèi)的租房rent方法。
-
-
六、動(dòng)態(tài)代理的實(shí)現(xiàn):
-
在程序的執(zhí)行過(guò)程中,使用JDK的反射機(jī)制,創(chuàng)建代理類(lèi)對(duì)象,并動(dòng)態(tài)的指定要代理的目標(biāo)類(lèi)。
-
它可以實(shí)現(xiàn)不用寫(xiě)代理類(lèi)的實(shí)現(xiàn)就可以創(chuàng)建代理類(lèi)對(duì)象。
-
JDK的動(dòng)態(tài)代理是就與反射?實(shí)現(xiàn)的,使用JDK中接口和類(lèi)實(shí)現(xiàn)代理對(duì)象的創(chuàng)建。
-
JDk動(dòng)態(tài)代理必須實(shí)現(xiàn)三個(gè)類(lèi)?Method ,Proxy,InovcationHandler
-
-
七、什么是AOP
-
面向切面編程,和OOP(面向?qū)ο缶幊蹋╊?lèi)似,一也是一種編程思想。
-
AOP的?作用【橫向抽取機(jī)制】
-
AOP采取橫向抽取【動(dòng)態(tài)代理】,對(duì)啊了傳統(tǒng)縱向繼承的重復(fù)性代碼,器應(yīng)用主要體現(xiàn)在事務(wù)處理,日志管理,權(quán)限管理,異常處理等方面。
-
主要作用:
-
分離功能性需求和非功能性需求,是開(kāi)發(fā)人員可以集中?的處理某一個(gè)關(guān)注點(diǎn)或者橫切邏輯
-
減少對(duì)業(yè)務(wù)代碼的侵入
-
增強(qiáng)代碼的可讀性和可維護(hù)性【簡(jiǎn)單來(lái)說(shuō),AOP的作用就是保證開(kāi)發(fā)者在不修改源代碼的前提下,為系統(tǒng)業(yè)務(wù)組件添加某種通用的功能,AOP就是代理模式的經(jīng)典應(yīng)用】
-
-
-
-
八、主流的AOP框架:
-
Spring?AOP?
-
基于AOP編程模式的一個(gè)框架,能夠有效的減少系統(tǒng)?間的代碼重復(fù),達(dá)到松耦合的目的。
-
純java實(shí)現(xiàn),不需要專(zhuān)門(mén)的編譯器和類(lèi)加載器,在運(yùn)行期間通過(guò)代理方式象目標(biāo)類(lèi)植入增強(qiáng)的代碼。
-
-
ASpectJ
-
基于java語(yǔ)言的AOP框架,提供專(zhuān)門(mén)的編譯器,在編譯時(shí)提供橫向代碼的植入。
-
-
-
九、術(shù)語(yǔ):
-
Target:目標(biāo)類(lèi)【需要被代理的類(lèi)】
-
Joinpoint:連接點(diǎn)【指哪些可能被攔截的方法】
-
PointCut:切入點(diǎn)【已經(jīng)被增強(qiáng)的連接點(diǎn)】
-
Advice:通知/增強(qiáng)【增強(qiáng)代碼(前置通知,后置通知,返回通知,拋出異常通知,環(huán)繞通知)】
-
WeaVing:植入【把增強(qiáng)的方法,應(yīng)用到目標(biāo)的Target來(lái)創(chuàng)建新的代理對(duì)象Proxy的過(guò)程】
-
Proxy:代理類(lèi)
-
Aspect:切面平【是切入點(diǎn)+通知的結(jié)合】
-
-
十、通知的五種類(lèi)型:
-
before:前置通知
-
after:后置通知
-
after-returning:返回后通知
-
after-throwing:拋出異常后通知
-
around:環(huán)繞通知
-
-
十一、AOP的優(yōu)點(diǎn):
-
是Spring的核心之一,使用AOP來(lái)優(yōu)化編程,在Spring框架中使用AOP的主要優(yōu)勢(shì):
-
提供聲明式企業(yè)服務(wù):
-
特別是作為EJB聲明式服務(wù)的替代品,最重要?的是這種事務(wù)是聲明式事務(wù)。
-
-
自定義切面:
-
允許用戶(hù)實(shí)現(xiàn)自定義切面。在默寫(xiě)不適應(yīng)OOP編程的場(chǎng)景中嗎,采用AOP來(lái)補(bǔ)充
-
-
耦合度降低:
-
可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而實(shí)業(yè)務(wù)邏輯的各個(gè)部分之間的耦合度降低,提高程序的可重用性,同時(shí)也提高了開(kāi)發(fā)。
-
-
-
-
十二、AOP開(kāi)發(fā)流程
<bean id ="userService" class ="com.shang.aopdemo02.UserServiceImpl" ></bean><bean id="AOPAdvice" class="com.shang.rentdemo.UserAop"></bean><aop:config><aop:pointcut id="pointcut" expression="execution(* com.shang.aopdemo02.*.add*(..))"/><aop:aspect ref="AOPAdvice"><aop:before pointcut-ref="pointcut" method="beforeAdvice" ></aop:before><aop:after pointcut-ref="pointcut" method="afterAdvice"></aop:after><aop:after-returning pointcut-ref="pointcut" method="afterReturnAdvice" ></aop:after-returning><aop:around pointcut-ref="pointcut" method="aroundAdvice"></aop:around><aop:after-throwing pointcut-ref="pointcut" method="afterThrowAdvice" ></aop:after-throwing></aop:aspect></aop:config>-
導(dǎo)入依賴(lài)
-
在xml文件中加入
-
< ? xml version= "1.0" encoding= "UTF-8" ? >
-
<beans xmlns="Index of /schema/beans"
-
? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
? ? xmlns:aop="Index of /schema/aop"
-
? ? xsi:schemaLocation="Index of /schema/beans
-
? ? http://www.springframework.org/schema/beans/spring-beans-xxx.xsd
-
? ? Index of /schema/aop
-
? ? http://www.springframework.org/schema/aop/spring-aop-xxx.xsd ">
-
</beans>
-
-
AOP的增強(qiáng)類(lèi)【before after 等方法】
-
實(shí)現(xiàn)的第一種方式:在xml自定義切面實(shí)現(xiàn)
-
實(shí)現(xiàn)的第二種方式:注解
-
在xml中開(kāi)啟注解和掃描包
-
在方法的上面加上注解
-
@Aspect:定義一個(gè)切面
-
@Pointcut:用于定義一個(gè)切入點(diǎn)
-
@Before:定義前置通知
-
@After:定義最終通知
-
@AfterReturning:定義后置通知
-
@Around:定義環(huán)繞通知
-
@AfterThrowing:定義拋出通知
-
-
-
到了這里,關(guān)于spring的AOP和IOC的原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!