程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> spring aop注解配置,springaop注解

spring aop注解配置,springaop注解

編輯:JAVA綜合教程

spring aop注解配置,springaop注解


spring aop是面向切面編程,使用了動態代理的技術,這樣可以使業務邏輯的代碼不摻入其他亂七八糟的代碼

可以在切面上實現合法性校驗、權限檢驗、日志記錄。。。

spring aop 用的多的有兩種配置方法:注解配置和xml配置

注解配置更好,友好重構、錯誤也好檢查

在這裡只講注解配置

aop概念

  • 切面:切面類,裡面有切點有通知,切面包括了一切(在哪切,干什麼)
  • 切點:定義了在個地方切
  • 通知:定義了在切點處做些什麼
  • 連接點:所有可以被切的地方

切面配置

@Aspect
public class LibraryAOPConf {}

@Aspect標記的類即是一個切面,在這個類中定義切面和通知

開啟自動代理

因為AOP是代理實現的,將切面放進bean容器是不會生成代理對象的,所以要開啟自動代理

@Configuration
@EnableAspectJAutoProxy
public class LibraryConf {}

在裝配bean的配置類加上@EnableAspectJAutoProxy就可以了

或者在xml中加上<aop:aspectj-autoproxy>

切點配置

配置切點需要用到切點表達式

 

當通知方法需要拿到切點的參數的時候,就需要參數傳遞

@Pointcut("execution(* aop.library.BookShop.sell(Book))"+"&amp;&amp;"+"args(book)")
 public void sell(Book book){}
 @Before("sell(book)")
 public void charge(Book book){
   System.out.println("這本書叫:"+book);
 }

切點攔截了aop.library.BookShop.sell(Book)方法,並且將參數Book賦給了sell(book)切點方法,然後通知方法又獲取了切點方法中的book

通知配置

 //基於切點表達式配置
 @Before("execution (* *.*.*(..))")//*號依次為返回類型、包名、類名、方法名
 public void charge(Book book){
  System.out.println("這本書叫:"+book);
 }
 //基於切點配置
 @Before("sell(book)")//sell(book)是一個切點
 public void charge(Book book){
  System.out.println("這本書叫:"+book);
 }

通知有5種類型:

  • 前置通知@Before
  • 後置通知(不管是否異常)@After
  • 異常通知@AfterThrowing
  • 返回通知@AfterReturning
  • 環繞通知@Around

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