动态的创建一个代理类出来, 创建这个代理类的实例对象, 注入的对象, 也是走的代理的对象.
负责做一些代码上的增强, 去调用原有的类.
如果实现了某个接口的, 那么Spring的aop会使用jdk的动态代理. 会去生成一个同样接口的代理类, 构造一个实例对象出来, jdk生成的代理类会去生成一个实现一样接口的类.
如果某个类没有实现接口, 那么springaop 会改用cglib 去生成动态代理. 去生成原有类的子类, 可以动态的生成字节码. 覆盖原有的方法, 在方法里去加入增强的代码.
jdk代理代码示例
代理类去实现InvocationHandler 接口
jdk动态代理代码示例
Proxy.newProxyInstance 去生成代理类, invoke 方法执行目标方法, 并进行增强.
jdk动态代理会生成一个动态代理类,生成相应的字节码,然后通过ClassLoader加载字节码
cglib动态代理代码示例
cglib动态代理代码示例
如果类是final 或者方法是final的 ,那么无法代理.
实现MethodInterceptor 接口
getInstance 去创建代理对象. intercept 方法去执行代理的方法和目标方法.
