在AOP中,Spring通过生成代理类,来完成切面的织入。如果目标类没有实现一个接口,Spring就使用CGLIB库生成目标类的一个子类,在创建这个子类时,Spring织入通知,并且把对这个子类的调用转发到目标类。在使用这种方式时需要注意一点,被标记为final的方法不能被通知,因为Spring创建的子类无法重写父类的final的方法。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

在AOP中Spring生成代理类的两种方式