`

JDK的动态代理机制

阅读更多
JDK的动态代理机制

JDK的动态代理是jdk1.3及以上版本提供的一种编程方法,它为一些面向切面的操作如性能检测,权限验证,日志记录等提供了一种解决方案。它是在被代理类的某个方法在执行前后,通过代理类执行一些新的逻辑。下面通过一个例子加以说明。
1.JDK的动态代理,必须要有一个接口,所以先定义一个接口,:
public interface ProxyInterface {
  void execute();
}


2.定义一个类实现这个接口
public class ProxyClass implements ProxyInterface {

//这里为了简单,仅用system输出一段字符串
	@Override
	public void execute() {
		// TODO Auto-generated method stub
       System.out.println("execute method");
	}

}

3.定义代理类,在其中加入自己的处理逻辑
public class Proxyhandler implements InvocationHandler {

	private ProxyInterface pi;
	
	public void setPi(ProxyInterface pi) {
		this.pi = pi;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		// TODO Auto-generated method stub
                  //execute方法执行前的逻辑
		System.out.println("------Before execute------------");
		
		Object result = method.invoke(pi, args);
		
                   //execute方法执行后的逻辑
		System.out.println("------After execute-------------");
		return result;
	}

}

4.定义一个测试类,测试这个动态代理
public class TestProxy {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
         //new 一个被代理对象
         ProxyInterface pi = new ProxyClass();
         //new一个代理对象
         Proxyhandler ph = new Proxyhandler();
         //将被代理对象赋给代理对象
         ph.setPi(pi);
         
         //通过代理机制生成一个新的被代理对象
         ProxyInterface p = 
        	 (ProxyInterface) Proxy.newProxyInstance(pi.getClass().getClassLoader(),new Class[]{ProxyInterface.class}, ph);
         //执行代理方法
         p.execute();
	}

}

输出结果如下:

    ------Before execute------------
    execute method
    ------After execute-------------

通过以上代码,就实现了一个非常简单的JDK动态代理,但它有个缺点,就是必须要有接口,如果是继承类的话,它就无法实现动态代理了。不过这可以用CGLIB动态代理来解决。
分享到:
评论

相关推荐

    java代理机制 JDK动态代理和cglib代理 详解

    java代理机制 JDK动态代理和cglib代理 详解

    JDK动态代理(AOP)使用及原理分析视频教程课件

    动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须...

    JDK动态代理+JDK动态代理完整代码+JDK动态代理代码实现逻辑

    动态代理::在程序运行时,运用反射机制动态创建而成。 动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为...

    jdk机制实现面向切面编程

    通过JDK动态代理机制实现增强,来理解AOP底层的实现

    java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar

    * 动态代理(JDK代理、接口代理、拦截器模式) * 动态代理中的静态方法:java.lang.reflect.Proxy.newProxyInstance (ClassLoader(类加载器),interface(接口),handler(监听处理器)) * * 代码示例:《帮爸爸...

    Jdk动态代理 底层

    java动态代理主要有2种,Jdk动态代理、Cglib动态代理,本文主要讲解Jdk动态代理的使用、运行机制、以及源码分析。当spring没有手动开启Cglib动态代理,即:或@EnableAspectJAutoProxy(proxyTargetClass = true),...

    cgLib与JDK动态代理的用法

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等...动态代理:在程序运行时,运用反射机制动态创建而成。

    你必须会的 JDK 动态代理和 CGLIB 动态代理

    我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性。 通过从静态代理、JDK 动态代理、CGLIB 动态代理来进行本文的分析。 静态...

    AOP的实现机制

    Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类...

    SpringAOP的实现机制(底层原理)、应用场景等详解,模拟过程的实例

    本资源将深入探讨Spring框架中使用的两种关键的动态代理方式:JDK动态代理和CGLib动态代理。这两种代理方式在Spring AOP中起到关键作用,用于实现横切关注点的切面编程。通过学习它们的原理和实际应用,您将能够更好...

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

    NULL 博文链接:https://bijian1013.iteye.com/blog/2382393

    jdk动态代理

    剖析java动态代理实现机制,只有明白了原理才会应用。详细请看代码

    三种动态代理的实现

    三种动态代理的实现(静态,jdk,cglib),jdk动态代理是由java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的

    Java动态代理方法详解.docx

    使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。 jdk动态代理,必须有接口,目标类必须实现接口...

    JAVA的反射机制与动态代理.pdf

    本文档先讲解了JDK的反射机制,然后是Proxy的动态代理、CGLIB的动态代理,因为这些是Spring AOP的底层技术,清楚了它们,你就更能够理解Spring AOP是如何工作的。在文档的最后简要写了Spring AOP的使用,因为这不是...

    动态代理.xmind

    该思维导图主要讲解了代理模式的具体实现,包括...其中jdk代理主要讲解了其具体的实现方式、原理、缺点、缓存机制等。Cglib代理主要讲解了其原理、与JDK代理的对比、Enhancer源码解析、methodProxy和Fastclass源码等。

    cglib 和asm jar包

    jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,...

    jdk反射机制资料大合集

    8本书,中英文都有,对反射讲解的很透彻。 希望对大家有些帮助! 具体内容下载看看,就知道了,要是不值这分,以后接不发了,呵呵

    动态代理和AOP详解

    本资源利用文档加源码的方式较详细的介绍了JDK 动态代理和Spring的AOP机制.相信对您理解相关方面的知识有很大作用.

    代理机制及AOP原理实现

    spring中动态代理机制的实现原理及AOP实现原理,JDK的反射,cglib类。

Global site tag (gtag.js) - Google Analytics