依存関係を追加する1.pomファイル
<!--面向切面-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.定義セクションクラス:@Aspectと@Component注釈がクラスのクラスカットクラスとして定義することができます。
@Aspect 使之成为切面类
@Component 把切面类加入到IOC容器中
public class BrokerAspect {
/**
* 定义切入点,切入点为com.example.demo.aop.AopController中的所有函数
*通过@Pointcut注解声明频繁使用的切点表达式
*/
@Pointcut("execution(public * com.example.demo.aop.AopController.*(..)))")
public void BrokerAspect(){
}
/**
* @description 在连接点执行之前执行的通知
*/
@Before("BrokerAspect()")
public void doBeforeGame(){
System.out.println("经纪人正在处理球星赛前事务!");
}
/**
* @description 在连接点执行之后执行的通知(返回通知和异常通知的异常)
*/
@After("BrokerAspect()")
public void doAfterGame(){
System.out.println("经纪人为球星表现疯狂鼓掌!");
}
/**
* @description 在连接点执行之后执行的通知(返回通知)
*/
@AfterReturning("BrokerAspect()")
public void doAfterReturningGame(){
System.out.println("返回通知:经纪人为球星表现疯狂鼓掌!");
}
/**
* @description 在连接点执行之后执行的通知(异常通知)
*/
@AfterThrowing("BrokerAspect()")
public void doAfterThrowingGame(){
System.out.println("异常通知:球迷要求退票!");
}
}
ここで、接点の位置を記述する式タンジェントポイント情報は、単に、本明細書ポイントカット式を説明意味します。
ブログのカットポイント式の概要をお勧めしますhttps://www.cnblogs.com/zhangxufeng/p/9160869.html
あなたが完全に詰まっ通知されます書くことをアドバイス周りメソッドのロジックをターゲットにすることができます。私たちは、代わりに通知する前に、別の事前通知とリアサラウンド通知を複数使用することができます。以下に示すように、分散液として予め通知、同じ後処理における通知は、ここで異なる通知方法は、前にたいです。
/**
* @description 使用环绕通知
*/
@Around("BrokerAspect()")
public void doAroundGame(ProceedingJoinPoint pjp) throws Throwable {
try{
System.out.println("经纪人正在处理球星赛前事务!");
pjp.proceed();
System.out.println("返回通知:经纪人为球星表现疯狂鼓掌!");
}
catch(Throwable e){
System.out.println("异常通知:球迷要求退票!");
}
}
パラメータとして受け入れのProceedingJoinPointサラウンド通知は、それが呼び出したメソッドに通知されます。あなたがコントロールする方法、ProceedingJoinPoint()メソッドを進める呼び出す必要がありますに通知する際の通知方法は、何もすることができます。あなたが呼び出し()メソッドを続行していないときは、アクセス方法をブロック通知されます。
あなたはパラメータを渡す必要がある通知方法は、我々はそれをどのように対処すべきですか?
あなたが作成し、カットする前に、ここでは異なるポイントのように、カットオフポイントはまた、パラメータは、通知の方法に供給されるように宣言していることです。
引数は、ポイントカット式(点)GameDataAspect()int型のパラメータメソッドは、通知、パラメータ名引数署名マッチポイントと方法の欠点に送信さを示すために送信されます。
package com.example.demo.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
* @desc:技术统计
* @author: CSH
**/
@Aspect
@Component
public class GameDataAspect {
/**
* 定义切入点,切入点为com.example.demo.aop.AopController中的所有函数
*通过@Pointcut注解声明频繁使用的切点表达式
*/
@Pointcut("execution(public * com.example.demo.aop.AopController.Durant(int)) && args(point))")
public void GameDataAspect(int point){
}
/**
* @description 使用环绕通知
*/
@Around("GameDataAspect(point)")
public void doAroundGameData(ProceedingJoinPoint pjp,int point) throws Throwable {
try{
System.out.println("球星上场前热身!");
pjp.proceed();
System.out.println("球星本场得到" + point + "分" );
}
catch(Throwable e){
System.out.println("异常通知:球迷要求退票!");
}
}
}