AOP使用

package com.googosoft.db.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/** 
* @author songyan 
* @version 2020年2月15日 上午10:14:06 
* @desc
*/
@Aspect
@Component
public class BrokerAspect {
    
    @Around("execution(* com.googosoft.db.dao.*.*.*(..))")
    public Object Around(ProceedingJoinPoint point){
        synchronized (this) {
            try {
                return point.proceed();
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}
package com.googosoft.db.aspect;

import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @author songyan
 * @version 2020年2月15日 上午10:14:06
 * @desc
 */
@Aspect
@Component
public class BrokerAspect {

    /**
     * 定义切入点,切入点为com.example.demo.aop.AopController中的所有函数
     * 通过@Pointcut注解声明频繁使用的切点表达式
     */
    @Pointcut("execution(* com.googosoft.db.service.*.*.add*(..)) || execution(* com.googosoft.db.service.*.*.update*(..)) || execution(* com.googosoft.db.service.*.*.del*(..))")
    public void BrokerAspect() {

    }

    /**
     * @description 在连接点执行之前执行的通知
     */
    @Before("BrokerAspect()")
    public void doBeforeGame() {
        synchronized (this) {

        }
    }

    /**
     * @description 在连接点执行之后执行的通知(返回通知和异常通知的异常)
     */
    @After("BrokerAspect()")
    public void doAfterGame() {
    }

    /**
     * @description 在连接点执行之后执行的通知(返回通知)
     */
    @AfterReturning("BrokerAspect()")
    public void doAfterReturningGame() {
    }

    /**
     * @description 在连接点执行之后执行的通知(异常通知)
     */
    @AfterThrowing("BrokerAspect()")
    public void doAfterThrowingGame() {
    }
}
原文地址:https://www.cnblogs.com/excellencesy/p/12320796.html