关闭

jdk、cglib动态代理

标签: cglibjdk动态代理
136人阅读 评论(0) 收藏 举报
分类:

JAVA 动态代理模式

Jdk动态代理

仅支持对实现了同一接口的类进行代理

 

创建一个被代理类的接口:

public interface Moveable {

       void move();

       void stop();

}

 

创建被代理类接口的实现

public class Car implements Moveable {

       @Override

       public void move() {

              System.out.println("汽车行驶中...");

       }

       @Override

       public void stop() {

              System.out.println("汽车停止行驶...");

       }

}

 

创建日志功能的代理类

public class ProxyHandler implements InvocationHandler{

       private Object obj;

       public ProxyHandler(Object obj){

              this.obj = obj;

       }

       @Override

       public Object invoke(Object proxy, Method method,Object[] args)

                     throws Throwable {

             

              System.out.println("日志开始...");

              Objecto = method.invoke(obj, args);

              System.out.println("日志结束...");

              return o;

       }

}

 

创建测试

public class Test {

       public staticvoid main(String[] args) {

              Carcar = newCar();

              Class<?>[]interfaces = car.getClass().getInterfaces(); 

              Moveablem=(Moveable) Proxy.newProxyInstance(Moveable.class.getClassLoader(),

                            interfaces,newProxyHandler(car));

              //m.move();

              m.stop();

       }

}

 

输出内容

测试成功

 

Cglib动态代理

能对任意类的任意方法实现代理,没有jdk动态代理的 必须实现同一接口的限制

需引入cglib.jar

 

创建被代理类

public class Train {

       public voidmove(){

              System.out.println("火车行驶中...");

       }

}

 

创建cglib日志代理类

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;

 

public class CglibProxy implements MethodInterceptor{

       private Object object;

       public CglibProxy(Object object){

              this.object= object;

       }

      

       public Object Proxy(){

              //创建加强器

              Enhancerenhancer = newEnhancer();

              //设置需加强的类

              enhancer.setSuperclass(object.getClass());

              //设置回调

              enhancer.setCallback(this);

              enhancer.setClassLoader(object.getClass().getClassLoader());

              return enhancer.create();

       }

       @Override

       public Object intercept(Object arg0, Method arg1,Object[] arg2,

                     MethodProxyarg3) throwsThrowable {

              //对被代理类的加强

              System.out.println("日志开始...");

              Objecto = arg3.invokeSuper(arg0, arg2);

              System.out.println("日志结束...");

              return o;

       }

      

}

 

创建测试类

public class Test {

       public staticvoid main(String[] args) {

              CglibProxycglibProxy = newCglibProxy(new Train());

              TrainnewTrain = (Train) cglibProxy.Proxy();

              newTrain.move();

       }

}

 

输出内容

测试成功


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

java代理(静态代理和jdk动态代理以及cglib代理)

说到代理,脑袋中浮现一大堆代理相关的名词,代理模式,静态代理,jdk代理,cglib代理等等。 记忆特别深刻的是,一次面试中,一位面试官问我,spring的AOP核心采用的设计模式是什么什么模式,阅读...
  • fighterandknight
  • fighterandknight
  • 2016-04-20 17:34
  • 3858

Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)

关于动态代理模式里面有两种实现,一种是jdk实现,一种是cglib来实现。 下面来整jdk来实现动态代理的Java实例。 jdk动态代理模式里面有个拦截器的概念,在jdk中,只要实现了Invocati...
  • qq_27093465
  • qq_27093465
  • 2016-11-25 21:40
  • 2584

JDK和Cglib实现动态代理实例及优缺点分析

Spring AOP使用的核心技术是动态代理,说到动态代理就不得不和设计模式中的代理模式联系起来,通过代理模式我们可以对目标类进行功能增强,在某个方法的执行前后增加一些操作,例如计算方法执行效率、打印...
  • Rongbo_J
  • Rongbo_J
  • 2015-10-17 13:38
  • 3684

cgLib与JDK动态代理的用法

  • 2012-08-08 23:18
  • 460KB
  • 下载

Java动态代理(JDK和cglib)

  • 2017-07-04 21:10
  • 246KB
  • 下载

jdk和cglib动态代理的例子{jar包+源码}

  • 2012-12-17 20:51
  • 2KB
  • 下载

jdk 的动态代理和CGLIB代理

  • 2012-07-06 09:47
  • 65KB
  • 下载

JDK动态代理和CGLIB代理

  • 6天前 13:48
  • 11KB
  • 下载

Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

class文件简介及加载      Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机...
  • samjustin1
  • samjustin1
  • 2016-08-19 23:40
  • 2214

Java动态代理(JDK与CGLib)

JAVA的动态代理  转载自:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.htm 代理模式  代理模式是常用的java设...
  • WangJiSongGericy
  • WangJiSongGericy
  • 2013-12-05 21:13
  • 520
    个人资料
    • 访问:6938次
    • 积分:260
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:37篇
    • 译文:0篇
    • 评论:1条