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框架系列(9) - Spring AOP實現原理詳解之AOP切面的實現Spring框架
- Spring AOP的AspectJ註解Spring
- Spring 面向切面程式設計AOP 詳細講解Spring程式設計
- Spring AOP——Spring 中面向切面程式設計Spring程式設計
- spring動態註冊bean會使AOP失效?SpringBean
- Spring5(七)——AOP註解Spring
- Spring之AOP面向切面程式設計Spring程式設計
- Mybatis應用手冊MyBatis
- Spring Boot系列十八 Spring AOP + 註解實現統一註解Spring Boot
- Spring框架系列(4) - 深入淺出Spring核心之面向切面程式設計(AOP)Spring框架程式設計
- Spring基於註解的aop配置Spring
- 深入學習Spring框架(三)- AOP面向切面Spring框架
- Spring AOP AspectJ 切面表示式高階用法Spring
- 面向切面的Spring(一) AOP術語、AspectJ表示式說明,execution表示式含有註解寫法Spring
- Spring系列:基於Spring-AOP和Spring-Aspects實現AOP切面程式設計Spring程式設計
- 死磕Spring之AOP篇 - Spring AOP註解驅動與XML配置SpringXML
- 面向切面的Spring(二) xml中定義aopSpringXML
- Spring AOP(面向切面程式設計)是什麼?Spring程式設計
- Spring Aop基於註解的實現Spring
- Spring AOP:面向切面程式設計的核心概念與實際應用Spring程式設計
- spring應用手冊-IOC(XML配置實現)-(26)-注入set集合SpringXML
- 手寫Spring---AOP面向切面程式設計(4)Spring程式設計
- 手寫Spring---AOP面向切面程式設計(3)Spring程式設計
- Spring中基於註解方式的AOP操作Spring
- Spring 原始碼(8)Spring BeanPostProcessor的註冊、國際化及事件釋出機制Spring原始碼Bean事件
- 前端解讀面向切面程式設計(AOP)前端程式設計
- SpringBoot切面Aop的demo簡單講解Spring Boot
- Spring第9天Aop簡介,Aopxml開發,Aop註解開發SpringXML
- spring通過註解註冊bean的方式+spring生命週期SpringBean
- Spring Boot實戰系列(3)AOP面向切面程式設計Spring Boot程式設計
- 【Spring AOP】暴力打通兩個切面之間的通訊Spring
- Spring學習筆記2(IOC註解方式&AOP)Spring筆記
- Spring元件註冊Spring元件
- 【Spring註解開發】元件註冊-使用@Configuration和@Bean給容器中註冊元件Spring元件Bean
- [轉載] spring aop 環繞通知around和其他通知的區別Spring