- 浏览: 414958 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (158)
- SpringBoot (10)
- vue.js (4)
- 2017基础知识 (2)
- jquery (4)
- extjs (8)
- spring (13)
- Java基础 (24)
- ibatis (2)
- oracle (18)
- 服务器配置 (8)
- maven (7)
- web应用开发 (14)
- 数据库 (9)
- 第三方依赖 (3)
- 百味人生 (7)
- svn (1)
- 问题一堆 (2)
- 测试驱动开发 (1)
- webServices (2)
- 网络编程 (2)
- 其它 (4)
- hibernate (2)
- ec标签序号列 (1)
- javascript (1)
- ActiveMQ (2)
- linux (5)
- UI (1)
- 问题汇集 (1)
- redis (1)
最新评论
-
jackson200:
讲解的狠不错!谢谢!
spring注入原理 -
阳光泛滥的日子:
讲的很透彻,受教了 。
spring中注解的实现原理 -
liudechao9:
最近在研究这方面,很不错,但是多线程并发的时候可能会出问题,而 ...
spring中注解的实现原理 -
小帅1127:
厉害啊 我的哥
spring中注解的实现原理 -
phoenixpaul:
...
Oracle存储过程和程序包
Spring AOP使用了两种代理机制,一种是基于JDK的动态代理,另一种是基于CGLib的动态代理,之所以需要两种代理机制,很大程度上是因为JDK本身只提供基于接口的代理,不支持类的代理。
切入点一般是方法调用之前,之后或者两端。
1、要代理的类
package com.yt.manager.proxy; public class ServicesImpl { public void outPut() { // TODO Auto-generated method stub System.out.println("to run outPut method.............."); } public void putOut() { // TODO Auto-generated method stub System.out.println("to run putOut method.............."); } public void outPut1(String v) { System.out.println("参数内容:" + v); } }
2、cglib代理类
package com.yt.manager.proxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; /** * cglib动态代理 intercept(Object obj, Method method, Object[] args,MethodProxy * proxy) 是CGLib定义的Inerceptor接口的方法,obj表示代理后的子类 , method为父类方法的反射对象,args为方法的动态入参, * 而proxy为代理类实例。一般使用 proxy进行调用父类方法,这样更快。 * @author zxf * */ public class CGlibProxyFactory implements MethodInterceptor { private Enhancer enhancer = new Enhancer(); public Object getProxy(Class c) { enhancer.setSuperclass(c); // ① 设置需要创建子类的类 enhancer.setCallback(this); return enhancer.create(); // ②通过字节码技术动态创建子类实例 } @Override public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable { before(); arg3.invokeSuper(arg0, arg2); end(); return null; } public void before() { System.out.println("--------在调用要代理类的方法前做的处理----------"); } public void end() { System.out.println("--------在调用要代理类的方法后做的处理----------"); } }
3、测试调用
package com.yt.manager.proxy; /** * 调用代理测试类 * @Description: * @ClassName: TestProxy * @Project: base-info * @Author: zxf * @Date: 2011-5-19 */ public class TestProxy { public static void main(String[] args) { //cjlib基于类的代理 ServicesImpl serviceImp = (ServicesImpl) new CGlibProxyFactory().getProxy(ServicesImpl.class); serviceImp.outPut(); } }
intercept(Object obj, Method method, Object[] args,MethodProxy proxy)是CGLib定义的Inerceptor接口的方法,obj表示代理后的子类 ,method为父类方法的反射对象,args为方法的动态入参, 而proxy为代理类实例。一般使用 proxy进行调用父类方法,这样更快。
发表评论
-
采用DES加密解密实现接口的通信加密认证
2018-08-22 09:20 807DES全称Data Encryption Standard, ... -
log4j2 配置
2016-01-06 17:10 71661、log4j2官方下载地址h ... -
本文出一个简单读取JVM内存使用情况的例子
2015-12-07 15:16 792<%@page contentType="t ... -
代替request.getRealPath()
2014-03-21 11:22 1019代替request.getRealPath(); ... -
session超时时间设置方法
2012-11-05 15:11 1140由于session值之前没有设置,以至于刚登录的 ... -
ant 使用
2012-06-25 11:41 1252build.xml <?xml version=&qu ... -
ant 使用
2012-06-25 11:39 2build.xml <?xml version=&qu ... -
java中的排序
2012-02-15 10:01 1027/** * 选择排序:首先第一趟从n个元素中找到最大或最小 ... -
封装类比较出现的问题
2011-10-09 10:24 1190Java为了性能提供了一个类似缓存的东西,不仅仅 ... -
java多线程三:线程同步
2011-07-20 11:21 1593多线程编程是很有趣的事情,它常常容易出现"错误 ... -
java多线程二:控制线程方法
2011-07-20 10:25 1012join线程: 1、Thread线程提供了让一个线程等待另外 ... -
java多线程一:概念与原理
2011-07-19 16:13 11651、线程是什么? ... -
java多线程
2011-07-19 15:06 31、线程是什么? 几乎所有的操作系统都支持 ... -
java多线程
2011-07-19 15:05 21、线程是什么? 几乎所有的操作系统都支持同事运 ... -
java多线程
2011-07-19 15:05 11、线程是什么? 几乎所有的操作系统都支持同事运行多 ... -
java多线程
2011-07-19 14:56 3http://lavasoft.blog.51cto.com/ ... -
java中的IO操作
2011-07-13 14:54 11211、 Java 的 IO 支持通过 ja ... -
多线程下载文件
2011-07-13 14:11 5226网络蚂蚁、FlashGet、迅 ... -
Java垃圾回收机制
2011-07-06 16:55 14971、当程序创建对象时, ... -
java反射机制
2011-06-02 14:06 1024一、定义: 1、在Java运行时环境中,对于任意 ...
相关推荐
- **CGLIB代理**适用于目标类没有接口或者不希望修改原有接口的情况,其性能通常优于JDK代理,因为它是基于字节码生成的子类,而JDK代理需要反射调用接口方法。 在实际开发中,如Spring AOP框架就同时支持JDK和...
CGlib则是Java动态代理的一种实现方式,尤其是在不提供接口的情况下,它通过生成目标类的子类来实现动态代理。 在Java中,JDK自带的动态代理机制是基于接口的,如果被代理的类没有实现任何接口,那么就无法使用JDK...
Spring框架是AOP实现的一个典范,它提供了两种主要的动态代理方式:JDK动态代理和CGLib动态代理。 **JDK动态代理**: JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring...
- **CGLIB代理**:CGLIB通过ASM生成一个继承自目标类的新类,这个新类覆盖了目标类的所有方法,并在这些方法内部调用拦截器链。在运行时,这个新类的实例作为代理对象。 5. **优缺点**: - JDK代理简单易用,但...
本资源提供的示例涵盖了这些核心概念,通过JDK动态代理、CGLIB动态代理以及拦截器链的实践,帮助开发者深入理解并掌握这些技术。 首先,让我们来探讨JDK动态代理。Java标准库中的`java.lang.reflect.Proxy`类和`...
Spring 框架中 JDK 动态代理和 CGLIB 动态代理是 Spring AOP 中一个非常重要的知识点。Spring AOP 框架会根据实际情况选择使用 JDK 的动态代理还是 CGLIB 的动态代理。 JDK 动态代理是 Java 自带的动态代理机制,它...
CGlib动态代理是Java开发中一个非常重要的工具库,它主要用来实现代理模式,尤其在面向切面编程(AOP)中发挥着关键作用。CGlib是一个强大的高性能的代码生成库,它可以在运行期扩展Java类与实现Java接口。CGlib并不...
- 如果目标类中包含静态方法,CGlib代理不会影响静态方法的行为。 总结,CGlib是一个强大且灵活的工具,它通过字节码生成技术实现了对Java类的动态代理,尤其在没有接口约束或者性能要求高的情况下,它是Java开发者...
本文将深入探讨如何在基于Maven的项目中利用CGLib库实现动态代理。CGLib(Code Generation Library)是Java中一个高性能的代码生成库,它在运行期通过字节码技术为类创建子类,以此实现动态代理。 1. Maven项目配置...
jdk和cglib动态代理的例子{jar包+源码} 解压:如有问题 用快压
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
CGlib是Java动态代理的一种实现方式,它不是依赖于Java的反射机制,而是通过生成目标类的子类来实现代理,因此在性能上通常优于基于接口的JDK动态代理。 CGlib动态代理的核心类包括`Enhancer`、`Callback`和`...
CgLib就是实现这种动态代理的一个工具,特别是在不支持接口的类上。 CgLib的核心功能是通过字节码技术创建子类。当目标类没有实现接口时,Java的标准动态代理机制JDK Proxy就无法工作,因为JDK Proxy是基于接口的。...
Cglib 动态代理的实现方式是:我们首先需要定义一个类,然后使用 Cglib 库来生成该类的代理对象,该代理对象将拦截对被代理对象的所有方法调用,并控制对被代理对象的访问。 Cglib 动态代理的优点是:它的实现方式...
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
CGlib是Java编程语言中的一个库,主要用于生成子类,以提供方法拦截和动态代理功能。它是对Bytecode Generation Library(字节码生成库)的一个封装,能够在运行时动态创建新类和对象,广泛应用于AOP(面向切面编程...
Java提供了两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。代理机制的核心是`java.lang.reflect.Proxy`类和...
本篇将详细探讨JDK动态代理和Cglib动态代理,并通过源码实例来加深理解。 首先,JDK动态代理是Java内置的一种机制,它依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。`Proxy`类...
当无法或者不想使用Java标准的JDK动态代理(只能代理接口实现类)时,CGLib可以生成目标类的子类来实现对目标对象的代理。这个过程中,CGLib的核心类`Enhancer`起到了关键作用。`Enhancer`允许开发者指定被代理的...