2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》

2.3.3 CGLIB动态代理
前面介绍了JDK的动态代理,从一些实例也可以看到,JDK动态代理是依赖于实现的接口的。而CGLIB弥补了这个缺点,让我们在不需要实现接口的情况下,也可以实现动态代理。JDK动态代理和CGLIB动态代理在Spring实现AOP中都是使用到的技术,Spring AOP默认是使用JDK动态代理来代理接口的,但是可以进行强制使用CGLIB动态代理。

CGLIB内部使用了ASM(Java字节码操控框架)来进行转换字节码。可以代理没有接口类的类。所以相比较JDK动态代理来说,灵活一些,更值得称赞的地方是,由于CGLIB第通过字节码产生子类进行覆盖委托类的非final方法进行代理,而JDK动态代理使用Java类反射进行代理,所以CGLIB动态代理比JDK动态代理更快。注意,CGLIB不能对final和私有方法进行代理。

实例演示。首先创建一个委托类(目标类)。

代码清单2-25:AliPay目标类

public class AliPay {
public void pay(String operation) {
System.out.println(“进行AliPay支付,操作:” + operation);
}
}
可以看到,在这里我们不再实现Pay接口了。

接下来我们需要引入一个依赖。在pom.xml文件中增加如下代码。不使用该包下的,使用org.springframework.cglib.proxy下的MethodInterceptor 类也是可以的。

代码清单2-26:pom.xml文件增加如下代码

cglib cglib 3.1 接下来就是直接写CGLIB的代理类。

你可能感兴趣的:(java,spring,jdk,mybatis,aop)