程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 菜鳥對spring aop 最基本的理解。以及應用,springaop

菜鳥對spring aop 最基本的理解。以及應用,springaop

編輯:JAVA綜合教程

菜鳥對spring aop 最基本的理解。以及應用,springaop


  第一次寫博客。本人是個菜鳥。有什麼不對的地方請指正。發這個博客只是為了整理自己的學習歷程。以及一些想法。

  下面開始正文:(這些東西摘自很多人的博客,最後自己總結的,有什麼不對的地方請指教。)

   oop是一個由上至下的豎向編程,aop是橫向的切入。

  OOP允許你定義從上到下的關系,但並不適合定義從左到右的關系。例如日志功能。日志代碼水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系,導致了大量代碼的重復。
  aop剖解開封裝的對象內部,並將那些影響了多個類的公共行為封裝到一個可重用模塊,並將其名為“Aspect”,也就是‘方面’。他可以降低模塊間的耦合度,並有利於未來的功能的修改和維護。

  總而言之:就是提取公共代碼(日志,權限),放到一塊,方便快捷。

實現AOP的技術,主要分為兩大類:一是采用動態代理技術jdk 或是 cglib,二是采用靜態織入的方式,使編譯器可以在編譯期間織入有關“方面”的代碼。我一般在項目在裡面用的就是動態代理。


配置文件 形式的aop 可用於日志,事務的控制

<!-- 系統服務組件的切面Bean -->
<bean id="serviceAspect" class="cn.ysh.studio.spring.aop.aspect.ServiceAspect"/>
<!-- AOP配置 -->
<aop:config>
<!-- 聲明一個切面,並注入切面Bean,相當於@Aspect -->
<aop:aspect id="simpleAspect" ref="serviceAspect">
<!-- 配置一個切入點,相當於@Pointcut -->
<aop:pointcut expression="execution(* cn.ysh.studio.spring.aop.service..*(..))" id="simplePointcut"/>
<!-- 配置通知,相當於@Before、@After、@AfterReturn、@Around、@AfterThrowing -->
<aop:before pointcut-ref="simplePointcut" method="before"/>
<aop:after pointcut-ref="simplePointcut" method="after"/>
<aop:after-returning pointcut-ref="simplePointcut" method="afterReturn"/>
<aop:after-throwing pointcut-ref="simplePointcut" method="afterThrow" throwing="ex"/>
</aop:aspect>
</aop:config>

 

基於注解 的aop
在配置文件中 聲明激活自動掃描組件功能,同時激活自動代理功能

<!-- 激活組件掃描功能,在包cn.ysh.studio.spring.aop及其子包下面自動掃描通過注解配置的組件 -->
<context:component-scan base-package="cn.ysh.studio.spring.aop"/>
<!-- 激活自動代理功能 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>


//聲明這是一個組件
@Component

//聲明這是一個切面Bean
@Aspect

//配置切入點,該方法無方法體,主要為方便同類中其他方法使用此處配置的切入點
@Pointcut("execution(* cn.ysh.studio.spring.aop.service..*(..))")
public void aspect(){ }


/*
* 配置前置通知,使用在方法aspect()上注冊的切入點
* 同時接受JoinPoint切入點對象,可以沒有該參數
*/
@Before("aspect()")


//配置後置通知,使用在方法aspect()上注冊的切入點
@After("aspect()")


//配置環繞通知,使用在方法aspect()上注冊的切入點
@Around("aspect()")


//配置後置返回通知,使用在方法aspect()上注冊的切入點
@AfterReturning("aspect()")

//配置拋出異常後通知,使用在方法aspect()上注冊的切入點
@AfterThrowing(pointcut="aspect()", throwing="ex")

 

 

  

 

   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved