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