spring-aop
2021-04-22 09:27
标签:基于接口 fine throws 处理 OWIN 基本 pre return advice 1.概述 spring-aop是一个面向切面的中间件,是对oop的完善和补充。 2.基本概念 (1)Aspect(切面):通常是一个类,里面可以定义切入点和通知 首先config通过将配置转化为BeanDefinetion,BeanDefinetion可以直接产生bean,bean主要是切面和目标 然后切面被封装成Advisor,切面的元素就是Advice,最后代理工厂将Advisor和TargetSource封装成最终的代理。 @Configuration } spring-aop 标签:基于接口 fine throws 处理 OWIN 基本 pre return advice 原文地址:https://www.cnblogs.com/yangyang12138/p/13277234.html
(2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用
(3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around
(4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
(5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类
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;
}
}
@EnableAspectJAutoProxy
public class Demo {
@Bean
public Demo demo(){
return new Demo();
}