spring-aop

2021-04-22 09:27

阅读:462

标签:基于接口   fine   throws   处理   OWIN   基本   pre   return   advice   

1.概述

  spring-aop是一个面向切面的中间件,是对oop的完善和补充。

2.基本概念

      (1)Aspect(切面):通常是一个类,里面可以定义切入点和通知
      (2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用
      (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around
      (4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
      (5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类

技术图片

首先config通过将配置转化为BeanDefinetion,BeanDefinetion可以直接产生bean,bean主要是切面和目标

然后切面被封装成Advisor,切面的元素就是Advice,最后代理工厂将Advisor和TargetSource封装成最终的代理。

 

 
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
 
//日志切面类
@Aspect
public class LogAspects {
    @Pointcut("execution(public int Demo.*(..))")
    public void pointCut(){};

    @Before("pointCut()")
    public void logBefore(){
        System.out.println("before");
    }
    @After("pointCut()")
    public void logAfter(){
        System.out.println("after");
    }
    @AfterReturning("pointCut()")
    public void logReturn(){
        System.out.println("return");
    }
    @AfterThrowing("pointCut()")
    public void logException(){
        System.out.println("error");
    }
    @Around("pointCut()")
    public Object Around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        System.out.println("before");
        Object obj = proceedingJoinPoint.proceed();
        System.out.println("after");
        return obj;
    }
}

@Configuration
@EnableAspectJAutoProxy
public class Demo {
@Bean
public Demo demo(){
return new Demo();
}

}

 

 

spring-aop

标签:基于接口   fine   throws   处理   OWIN   基本   pre   return   advice   

原文地址:https://www.cnblogs.com/yangyang12138/p/13277234.html


评论


亲,登录后才可以留言!