代理知识
代理模式
代理就是对目标方法的增强。
比如:在执行目标方法时,需要开启事务和提交事务这些动作,可以称其为增强动作。
那么把需要目标方法单独写一个目标类,把需要增强的动作单独写一个增强类,然后再写一个代理类用于把增强动作和目标方法结合起来。
这样就实现解耦合,即业务类只专注业务,其他的增强动作另外编写代码,最后只需要使用代理对象即可。
代理分为:静态代理、动态代理
静态代理
静态代理在程序运行之前,代理类的.class文件就已经存在了。
静态代理需要手动创建代理类,需要和目标类实现同样的接口,在其实现增强方法和目标方法的结合。
静态代理的可重用性不高,代码重复度较高,当目标类较多时需手动创建的代理类数量较多。
动态代理
动态代理是在程序运行期间,动态拼接生成.class文件。
动态代理包含:JDK动态代理、cglib动态代理(通过ASM实现生成字节码文件)
(1)JDK动态代理
在生成代理对象的时候,需要实现一个拦截器InvocationHandler接口,增强动态和目标动作的具体结合逻辑就是在拦截器(invoke方法)里实现的。
JDK动态代理要求目标类实现接口。
(2)cglib动态代理
它是一个第三方提供的jar包,首先需要导入jar包。其在生成代理对象的时候,需要实现一个Interceptor接口,增强动态和目标动作的具体结合逻辑在intercept方法里实现。
cglib动态代理是基于继承来实现代理的,所以无法对final类、private方法和static方法进行处理。

浙公网安备 33010602011771号