spring應用手冊-AOP(註解)-(20)-切面釋出-前置通知
戴著假髮的程式設計師出品 抖音ID:戴著假髮的程式設計師 歡迎關注
切面釋出-前置通知
spring應用手冊(第三部分)
前置通知的意思是在目標方法執行之前執行增強程式。前面的例子我們也寫過潛質通知。
注意,前置通知僅僅就是前置增強,前置通知並不能改變目標方法的執行。更不能阻止目標方法的執行。
現在我們來仔細分析以下前置通知的案例:
我們準備一個業務類InfoService,其中有一個方法為showInfo(String info).
/**
* @author 戴著假髮的程式設計師
*
* @description
*/
@Component
public class InfoService {
public void showInfo(String info){
System.out.println("InfoService-showInfo輸出資訊:"+info);
}
}
新增一個Aspect類,在其中新增一個前置通知:
/**
* @author 戴著假髮的程式設計師
*
* @description
*/
@Component //將當前bean交給spring管理
@Aspect //定義為一個AspectBean
public class DkAspect {
@Pointcut("execution(* com.st.service..*.*(..))")
public void pointcut1(){}
@Before("pointcut1()")
public void before(){
System.out.println("--這裡是前置通知--");
}
}
主配置類:
/**
* @author 戴著假髮的程式設計師
*
* @description
*/
@Configuration
@ComponentScan("com.st")
@EnableAspectJAutoProxy
public class Appconfig {
}
測試:
@Test
public void testBefore(){
ApplicationContext ac =
new AnnotationConfigApplicationContext(AppConfig.class);
InfoService bean = ac.getBean(InfoService.class);
bean.showInfo("今天天氣不錯");
}
結果:
這裡前置通知已經生效。
接下來我們來看看前置通知的方法中可以傳遞的引數。
首先就是可以傳遞一個JoinPoint類,這個類在前面已經解釋過,除此之外,我們還可以傳遞我們攔截的方法的引數。
看下面案例:
我們修改Aspect類
/**
* @author 戴著假髮的程式設計師
*
* @description
*/
@Component
@Aspect
public class DkAspect {
@Pointcut("execution(* com.st.dk.demo8.service..*.*(..))")
public void pointcut1(){}
/**
* 這裡注意
* 我們可以傳入JoinPoint不用解釋
* 如果我們希望傳入其他引數,則需要使用args指定,
* 這裡的args(info)中的info必須和引數info一致。
* 而且要和被攔截的方法中的引數名也一致。
*/
@Before("pointcut1() && args(info)")
public void before(JoinPoint joinPoint,String info){
System.out.println("--這裡是前置通知開始--");
System.out.println("目標物件:"+joinPoint.getTarget());
System.out.println("代理物件:"+joinPoint.getThis());
System.out.println("增強的方法的引數列表:"+ Arrays.toString(joinPoint.getArgs()));
System.out.println("我們手動傳入的引數info:"+info);
System.out.println("--這裡是前置通知結束s--");
}
}
再測試:
這裡我們再次提醒一個配置,我們可以通過JoinPoint獲取被攔截方法的引數列表陣列,但是如果我們希望某個指定的引數直接傳遞到我們的增強方法中時,我們需要使用args(引數名)匹配有指定引數的方法,所有的相關引數名必須相同。
如果還不明白請參看視訊講解。
相關文章
- Spring AOP中的前置通知和後置通知詳解Spring
- Spring 面向切面AOPSpring
- Spring-AOP(面向切面)Spring
- Spring AOP的AspectJ註解Spring
- spring 05 aop_註解Spring
- Spring 面向切面程式設計AOP 詳細講解Spring程式設計
- Spring框架系列(9) - Spring AOP實現原理詳解之AOP切面的實現Spring框架
- spring動態註冊bean會使AOP失效?SpringBean
- Spring AOP——Spring 中面向切面程式設計Spring程式設計
- Spring之AOP面向切面程式設計Spring程式設計
- Spring5(七)——AOP註解Spring
- Spring-Aop註解形式案例Spring
- Mybatis應用手冊MyBatis
- Spring Boot系列十八 Spring AOP + 註解實現統一註解Spring Boot
- 使用Spring AOP切面解決資料庫讀寫分離Spring資料庫
- 深入學習Spring框架(三)- AOP面向切面Spring框架
- Spring AOP AspectJ 切面表示式高階用法Spring
- Spring框架系列(4) - 深入淺出Spring核心之面向切面程式設計(AOP)Spring框架程式設計
- Spring基於註解的aop配置Spring
- Spring 註解方式實現的AOPSpring
- 面向切面的Spring(一) AOP術語、AspectJ表示式說明,execution表示式含有註解寫法Spring
- 死磕Spring之AOP篇 - Spring AOP註解驅動與XML配置SpringXML
- Spring AOP(面向切面程式設計)是什麼?Spring程式設計
- 面向切面的Spring(二) xml中定義aopSpringXML
- spring aop 切面程式設計控制管理事務Spring程式設計
- Spring AOP:面向切面程式設計的核心概念與實際應用Spring程式設計
- Spring Aop基於註解的實現Spring
- Spring基於註解的AOP測試Spring
- Spring系列:基於Spring-AOP和Spring-Aspects實現AOP切面程式設計Spring程式設計
- spring心得8--AOP各種通知案例講解.docSpring
- 前端解讀面向切面程式設計(AOP)前端程式設計
- Linux iptables應用手冊Linux
- spring心得7--spring第二大特點AOP(面向切面)講解Spring
- 手寫Spring---AOP面向切面程式設計(4)Spring程式設計
- 手寫Spring---AOP面向切面程式設計(3)Spring程式設計
- Spring 使用Aop 做切面日誌,和許可權。Spring
- Spring中基於註解方式的AOP操作Spring
- spring應用手冊-IOC(XML配置實現)-(26)-注入set集合SpringXML