Spring AOP

一、Spring AOP 的一些核心概念

概念含义备注
Aspect切面表示在当前类中操作切面
Join Point连接点,Spring AOP里总代表一次方法执行添加Advice 相关注解的方法,在方法中处理业务逻辑
Advice通知,在连接点执行的动作@Before、@AfterReturning、 @AfterThrowing、 @After、@Around
Pointcut切入点,说明如何匹配连接点匹配哪些类或方法或参数被拦截,可用的表达式:execution、within、this、target、@target、@args、@within、
Introduction引入,为现有的类型声明额外的方法和属性可以通过@DeclareParents注解通过名称引入接口
Target object目标对象被拦截代理的对象
AOP proxyAOP代理对象,可以是JDK动态代理,也可以是GCLIB代理详见:https://mp.csdn.net/mdeditor/92789301#
Weaving织入,连接切面与目标对象或类型创建代理的过程

二、AOP 用于打印日志

  1. 在配置类中启用动态代理 @EnableAspectJAutoProxy
    在这里插入图片描述
    2)定义切面 @Aspect
    在这里插入图片描述
    3)@Around 方式直接拦截对应的对象(二选一)
    在这里插入图片描述
    4)@Around + @Pointcut 方式拦截对应的对象(二选一)
    在这里插入图片描述

三、使用注意事项

1)@Around 可以处理方法的 整个执行过程是最常用的
2)@Around 必须返回 ,官方demo

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.ProceedingJoinPoint;

@Aspect
public class AroundExample {

    @Around("com.xyz.myapp.SystemArchitecture.businessService()")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
        // start stopwatch
        Object retVal = pjp.proceed();
        // stop stopwatch
        return retVal;
    }
}

3)@Before、 @After 等不用返回值,官方demo

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.After;

@Aspect
public class AfterFinallyExample {

    @After("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")
    public void doReleaseLock() {
        // ...
    }
}

四、Spring 中对aop 常见封装应用(around advice)

public class DebugInterceptor implements MethodInterceptor {

    public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println("Before: invocation=[" + invocation + "]");
        Object rval = invocation.proceed();
        System.out.println("Invocation returned");
        return rval;
    }
}

注意:MethodInterceptor 是 “Cglib动态代理” 方式实现的, 非jdk的动态代理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值