AOP面向切面編程

AOP面向切面編程
開發時:核心業務代碼與服務系統代碼是相對獨立的;運行時:核心業務執行時,擁有系統服務的功能。實現這種效果的技術就是AOP
AOP面向切面編程,採用的是橫向抽取機制,將分散在各個方法上的重複的代碼提取出來,然後再程序編譯或運行時,再將這些提取出來的代碼應用到需要執行的地方。
AOP的本質就是代理,對方法進行增強。
兩種代理
JDK的動態代理→基於接口的
CGLIB代理→基於子類
Spring AOP面向切面編程
Advice通知:AOP在特定切點上執行的增強處理。
Pointcut切點:對那些類、那些方法進行增強。
Aspect切面:通常是一個類,裏面定義了通知和切點,如果切點定義在了切面外,那麼其他的切面都可以引用。
AOP=通知+切點
通知類型
method:增強執行的方法,是方法的名字。
pointcut-ref:指定對哪個方法進行增強
前通知:方法執行前通知
<aop:before method="" pointcut-ref=""/>
後通知:方法執行後通知,又被成爲最終通知,無論如何都會被執行

<aop:after method="" pointcut-ref=""/>

返回後通知:只有正常返回纔會執行

<aop:after-returning method="" pointcut-ref=""/>	

異常通知:發生異常後

<aop:after-throwing method="" pointcut-ref=""/>

環繞通知:在方法的執行前後進行增強,等同於:前通知+返回後通知

<aop:around method="" pointcut-ref=""/>

Pointcunt 切點
JDK**Pointcut 基於正則表達式的切點
AspectJExpressionPointCunt 基於AOP的切點表達式.

Aspect開發
基於XML配置文件的AspectJ開發

<bean id="user" class="cn.bean.User"></bean>
<!-- 配置通知類 -->
<bean class="cn.demo.MyAdvice" id="myAdvice"></bean>
<aop:config>
	<!-- 定義切面 -->
	<aop:aspect ref="myAdvice">
		<!-- 定義一個切點
			使用AspectJ切點表達式
			execution(返回類型   包路徑)
		-->
		<aop:pointcut expression="execution(* cn.bean.User.login())" id="cut1"/>
		<!-- 配置前通知 
			method:增強執行的方法
		-->
		<aop:before method="doBefore" pointcut-ref="cut1"/>
		
		<!-- 後通知 -->
		<aop:pointcut expression="execution(* cn.bean.User.loginOut())" id="cut2"/>	
		<aop:after method="doAfter" pointcut-ref="cut2"/>
				
	</aop:aspect>
</aop:config>

基於註解的方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章