Spring 中的 AOP

转自AOP-睿站-狂神说

AOP 指的是面向切面编程

常用的场景是通过动态代理的对象,在原有的方法前后加上新的方法。

比如要在某个 service 的前后,增加日志功能。

可以写个类,实现 MethodBeforeAdviceMethodAfterAdvice

然后在 xml 中定义切入点等配置,那么在执行对应的方法时,就会有方法“环绕”在其周围。

我们还可以通过注解实现 AOP ,这样比较易懂。

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect //标注这个类是一个切面
public class AnnotationPointcut {

    @Before("execution(* com.kuang.service.UserServiceImpl.*(..))")
    public void before(){
        System.out.println("=====方法执行前======");
    }
    
    @After("execution(* com.kuang.service.UserServiceImpl.*(..))")
    public void after(){
        System.out.println("=====方法执行后======");
    }

    //在环绕增强中,我们可以给定一个参数,代表我们要获取处理切入的点;
    @Around("execution(* com.kuang.service.UserServiceImpl.*(..))")
    public void around(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("环绕前");
        object proceed = jp.proceed();
        //执行方法System.out.print1n("环绕后");
        //signature signature = jp.getsignature();//获得签名
        //System.out.printLn( "signature : "+signature);
        //System.out.println(proceed);
    }
}
posted @ 2022-03-14 11:35  ticlab  阅读(26)  评论(0编辑  收藏  举报