`
squall140
  • 浏览: 146273 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

AOP的代理区分 (Java动态代理和CGLIB代理)

 
阅读更多

第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别?

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>

分享到:
评论

相关推荐

    cglib动态代理

    1. **运行时代码生成**:cglib允许在程序运行期间动态生成新的类,这使得它可以用于多种应用场景,例如AOP(面向切面编程)和ORM(对象关系映射)等。 2. **无需实现接口**:与JDK的代理机制不同,cglib不需要目标类...

    Java面试 spring知识点 线程池 面试题

    Spring AOP原理涉及到代理模式,Spring提供了两种类型的AOP代理:JDK动态代理和CGLIB代理。前者适用于实现了接口的类,后者则用于未实现接口的类。面试者需要理解这两种代理的工作机制,并能根据场景选择合适的代理...

    【电子版】Java校招面试题库(附答案与解析)java篇.zip

    - 动态代理:理解JDK动态代理和CGLIB动态代理的原理及应用场景。 8. **设计模式** - 常见设计模式:单例、工厂、观察者、装饰器、适配器、策略等模式的理解和应用。 9. **JVM优化** - 垃圾回收算法:了解新生代...

    java软件工程师面试试题集合

    - 动态代理:了解Java动态代理的实现,包括JDK动态代理和CGLIB动态代理。 7. **网络编程** - Socket编程:创建TCP和UDP套接字,进行数据的发送和接收。 - HTTP协议:理解HTTP请求和响应的结构,以及状态码的含义...

    JAVA面试题集锦大全宝典

    - 动态代理:理解JDK动态代理和CGLIB动态代理的实现原理。 6. **设计模式** - 工厂模式、单例模式、建造者模式、工厂方法模式等常见设计模式的实现和应用场景。 - 模板方法模式、装饰器模式、适配器模式在实际...

    高级Java人才培训专家-spring高级49讲

    - **统一jdk和cglib**:介绍Spring如何统一管理和使用JDK和CGLIB代理。 - **切点匹配**:讲解切点表达式的定义及匹配规则。 - **@Aspect与Advisor**:解释Spring AOP中的@Aspect注解和Advisor的作用。 - **静态通知*...

    长时间收集的常用的java面试题目,内容详尽,值得一观。

    - **代理模式**:静态代理和动态代理(JDK Proxy和CGLIB)。 7. **JVM** - **类加载机制**:加载、验证、准备、解析和初始化五个阶段。 - **内存结构**:堆、栈、方法区、本地方法栈和程序计数器的职责。 - **...

    Java技术面试 ---- 框架.md

    它可以分为基于接口的动态代理和基于子类的动态代理(如 CGLIB)。 - **动态代理的作用**:动态代理可以在运行时为一个接口或者类生成一个子类或本类的代理对象,从而在方法调用前后添加额外的功能,如日志记录、...

    JAVA面试题

    - 动态代理的实现,包括JDK动态代理和CGLIB。 11. **网络编程** - Socket编程的基本概念,客户端和服务器端的建立连接和通信。 - HttpURLConnection和HttpClient的区别,HTTP请求的GET和POST方法。 12. **设计...

    张孝祥正在整理Java就业面试题大全

    2. 动态代理:JDK动态代理与CGLIB动态代理的实现。 3. 注解:自定义注解,元注解,注解处理器。 六、JVM内存模型 1. 堆与栈:理解两者的区别,对象分配原则。 2. 垃圾回收:GC原理,新生代、老年代划分,垃圾收集器...

    JAVA 面试题大全

    - 动态代理:了解动态代理的实现方式,如JDK动态代理和CGLIB。 8. **网络编程**: - Socket编程:客户端与服务器端的通信。 - URL与URLConnection:网络资源的访问和下载。 9. **设计模式**: - 常见设计模式...

    java面试题

    - **动态代理**:了解JDK动态代理和CGLIB动态代理的使用。 9. **网络编程** - **Socket编程**:理解TCP和UDP协议,实现简单的客户端和服务端程序。 - **HTTP协议**:理解GET、POST请求及其原理。 10. **框架...

    华为面试题有关java的

    - **动态代理**:理解JDK和CGLIB实现的动态代理。 - **构造函数、方法和字段的反射操作**:了解如何在运行时动态调用。 7. **设计模式** - **单例模式**:讨论常见的单例实现方式及其优缺点。 - **工厂模式**:...

    史上最全Java面试266题:算法+缓存+TCP+JVM+搜索+分布式+数据库.docx

    9. **动态代理**:Java提供了JDK动态代理和CGLIB两种实现,前者基于接口,后者基于字节码生成。JDK动态代理简单且无需额外依赖,但必须有接口;CGLIB生成子类实现代理,适用于无接口的情况。 10. **JVM内存结构**:...

    multi-datasource:数据源超过两个

    多数据源的实现主要是通过Java的动态代理和AOP(面向切面编程)技术来完成的。核心思路是根据业务需求,在运行时动态切换不同的数据源。具体步骤包括: 1. 数据源配置:首先,我们需要为每个数据源创建独立的...

    J2EE开发全程实录PDF J2EE开发全程实录PDF

    - **CGLib**:一个高性能的轻量级代码生成库,可以通过字节码技术动态创建代理对象。 - **JDKProxy**:Java内置的一种代理机制,适用于实现了接口的类。 #### Java平台下的Web开发 - **标记语言**:用于描述网页...

    springBoot全局配置文件

    - **spring.aop.proxy-target-class**:定义是否使用CGLIB创建代理类,默认为`false`,即使用Java接口代理。 ##### 4. 应用(Application)配置 - **spring.application.index**:定义应用索引。 - **spring....

    Building+a+REST+API+with+Spring

    - **cglib 依赖**:在Spring 3.2之前,可能需要手动添加cglib依赖以支持AOP等功能。 - **Spring 3.2及之后**:从Spring 3.2开始,cglib被内置为Spring的一部分,不再需要单独添加依赖。 #### 1.3 Java-based Web ...

    Spring入门十大问题

    ### Spring入门十大问题详解 #### 一、Spring框架简介与学习资源 **知识点:** - **Spring框架**:是一款开源的轻量级Java EE应用程序框架,由Rod Johnson创建,主要目的是简化企业... - 注意区分大小写及拼写错误。

Global site tag (gtag.js) - Google Analytics