1.aop是面向切面的编程思想 ,采用的设计模式是代理模式
2.实现AOP的技术又分为动态代理和静态代理,动态代理不会修改字节码文件,在内存中临时为该方法生成一个aop对象,这个对象包括目标对象的全部方法,并且在特定的切点做了增强处理,静态代理是通过修改字节码文件,在项目运行前.class文件就已经存在
3.动态代理实现的两种方式,jdk和cglib动态代理,jdk动态代理通过反射来接受被代理的类,并且被代理的类必须实现一个接口,cglib是一个代码生成的类库,可以运行时动态生成某个类的子类,cglib是通过继承的方式做的动态代理,因为被final修饰的类无法被代理
4.jdk动态代理的核心是invacationhadler接口和proxy类,每个动态代理类都会实现invacationhadler接口,通过动态代理类的有参构造函数,将被代理对象传入生成一个hander对象,通过Proxy类的方法newProxyInstance生成代理对象,该方法有三个参数
第一个参数 handler.getClass().getClassLoader() ,使用handler这个类的ClassLoader对象来加载我们的代理对象
第二个参数 被代理对象.getClass().getInterfaces(),获取真实对象所实行的接口,这样我就能调用这组接口中的方法了
第三个参数handler,将这个代理对象关联到了上方的 InvocationHandler 这个对象上
5.代理对象调用被代理对象的方法后,会自动跳转到代理对象关联的hander对象中的invoke()方法,所有的增强方法都写在invoke()方法中
详细的解释参照https://www.cnblogs.com/xiaoluo501395377/p/3383130.html