spring5 AOP
1.基本概念
不通过修改源代码的方式增加功能
2.原理
2.1动态代理
1 有接口的方式使用jdk动态代理
创建接口实现类代理对象,增强类的方法
2 没有接口使用CGlib动态代理
创建子类的代理对象,增强类的方法
package com.cj.spring5; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class JDKProxy{ public static void main(String[] args) { Class[] interfaces = {UserDao.class}; UserDao userDao = new UserDaoImpl(); UserDao userDao1 = (UserDao)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDaoProxy(userDao)); System.out.println(userDao1.add(1, 2)); } } //创建代理对象代码 class UserDaoProxy implements InvocationHandler{ private Object obj; public UserDaoProxy(Object obj){ this.obj=obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("方法执行之前。。。"); Object res = method.invoke(obj, args); System.out.println("方法执行之后。。。"); return res; } }
3 专业术语
1.连接点 所有可以增强的方法
2.切入点 增强的方法
3.通知(增强) 增强逻辑的代码
前置
后置
环绕
异常
最终
4.切面 把通知应用到切入点过程
4 切入点表达式
1 使用AspectJ实现Aop操作
2 基于AspectJ实现Aop
1.基于xml
2.基于注解
3 在项目中引入相关依赖
4 切入点表达式
execution[[权限修饰符][返回类型][类全路径][方法][参数]]
举例:execution[* com.cj.spring.add(..)]