Spring AOP 实现之CGLIB

cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。
cglib封装了asm,可以在运行期动态生成新的class。
cglib用于AOP,jdk中的proxy必须基于接口,cglib却没有这个限制。

原理区别:

java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

 

如何强制使用CGLIB实现AOP? 
* 添加CGLIB库,SPRING_HOME/cglib/*.jar 
* 在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>

JDK动态代理和CGLIB字节码生成的区别? 
* JDK动态代理只能对实现了接口的类生成代理,而不能针对类 
* CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 
  因为是继承,所以该类或方法最好不要声明成final

Java动态代理和CGLIB代理在其他方面没什么区别,只有

在Spring配置文件中配置的区别:

<bean id="#" class="org.springframework.ProxyFactoryBean">

<property name="proxyTargetClass">

<value>true</value>

</property>

</bean>

***************************************************

<bean id="#" class="org.springframework.ProxyFactoryBean">

<property name="proxyInterfaces">

<value>com.gc.impl.TimeBookInterface</value>

</property>

</bean>

特别说明:尊重作者的劳动成果,转载请注明出处哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp91

时间: 2024-09-23 17:18:52

Spring AOP 实现之CGLIB的相关文章

Spring AOP源码分析(五)Spring AOP的Cglib代理

上一篇文章介绍了Spring AOP的JDK动态代理的过程,这一篇文章就要介绍下Spring AOP的Cglib代理过程,仍然是使用上一篇文章的工程案例.  JDK动态代理是由JdkDynamicAopProxy来生成代理对象的,Cglib则是由CglibAopProxy来生成代理对象的.JdkDynamicAopProxy.CglibAopProxy实现了AopProxy接口,如下:  ? 1 2 3 4 5 6 7 public interface AopProxy {       Obje

spring学习笔记(7)AOP前夕[2]CGLib动态代理实例解析

CGLib动态代理基本原理 CGLib--Code Generation Library,它是一个动态字节代码生成库,基于asm.使用CGLib时需要导入asm相关的jar包.而asm又是何方神圣? asm是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为.Java class 被存储在严格格式定义的 .class文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称

J2EE中使用Spring AOP框架和EJB组件

j2ee 快速发展的开发人员社区.对各种后端技术(包括JMS.JTA.JDO.Hibernate.iBATIS等等)的支持,以及(更为重要的)非侵入性的轻量级IoC容器和内置的AOP运行时,这些因素使得Spring Framework对于J2EE应用程序开发十分具有吸引力.Spring托管的组件(POJO)可以与EJB共存,并允许使用AOP方法来处理企业应用程序中的横切方面--从监控和审计.缓存及应用程序级的安全性开始,直到处理特定于应用程序的业务需求. 本文将向您介绍Spring的AOP框架在

Spring AOP从入门到放弃之概念以及Spring Boot AOP demo

本文小福利 点我获取阿里云优惠券 AOP核心概念 1.横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点 2.切面(aspect)->(通知+切点) 类是对物体特征的抽象,切面就是对横切关注点的抽象. 通知+切点 意思就是所有要被应用到增强(advice)代码的地方.(包括方法的方位信息) 3.连接点(joinpoint)->(被拦截的方法) 被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截的方法,实际上连接点还可以是字段或

xsd-初学者spring aop/tx配置出现问题不会

问题描述 初学者spring aop/tx配置出现问题不会 错误信息: Multiple annotations found at this line: - schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/context/spring-beans.xsd', because 1) could not find the document; 2) the documen

Spring AOP 问与答

AOP的实现有哪些 AOP常见的实现有: Spring AOP Aspectj Guice AOP Jboss AOP 等 AOP Alliance 是什么, 为什么Spring AOP, G UI CE AOP等需要aopalliance.jar? AOP Alliance定义了AOP中的基础概念,但它并不是一种AOP的实现,它的目标为各种AOP实现提供统一的接口.Spring AOP, GUICE等都采用了AOP Alliance中定义的接口. Spring AOP 和 Aspectj的区别

Spring AOP常见错误解析

Spring 3.0以后的版本相比于2时代的版本一个重要的变化就是aop所依赖的jar包没有一起发布,需要自己单独下载. Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理.如果被代理的目标实现了至少一个接口,则会使用JDK动态代理,如果用JDK动态代理,就必须为被代理的目标实现一个接口(要注意的地方是:需要将ctx.getBean()方法的返回值用接口类型接收):.所有该目标类型实现的接口都将被代理.若该目标对象没有实现任何接口,则创建一个CGLIB代理,如果使用CG

Spring AOP Example Tutorial

这是一篇翻译,原文:Spring AOP Example Tutorial – Aspect, Advice, Pointcut, JoinPoint, Annotations, XML Configuration Spring 框架发展出了两个核心概念:依赖注入 和面向切面编程(AOP).我们已经了解了 Spring 的依赖注入 是如何实现的,今天我们来看看面向切面编程的核心概念以及 Spring 框架是如何实现它的. AOP 概要 大多数的企业应用都会有一些共同的对横切的关注,横切是否适用于

cglib-不停服务器情况下怎么动态开启或者关闭spring aop

问题描述 不停服务器情况下怎么动态开启或者关闭spring aop 需求是记录指定方法的执行时间存oracle库,我就想到了spring aop 但是需还说,服务启动的时候(在没有好的方法的时候该功能暂且用aop)aop默认 是**关闭**的, 在前端jsp页面有一个开关.用户点击打开该开关的时候 aop才启动记录功能(为了节省服务器资源). 但是 aop是在启动的时候把切面相关的bean都加载了(cglib里),如果启动的时候不开启aop,是不是这些bean就不加载了,那么再次开启怎么办,据说