`

JDK实现动态代理的例子-proxy

 
阅读更多
public interface Target {

    public void doSomething();

}

 

public class TargetImpl implements Target {

    @Override
    public void doSomething() {
        
        System.out.println("doSomething 方法开始执行----");
        
    }

}

 

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationhandler implements InvocationHandler {

    private Target target;
    
    public MyInvocationhandler(Target target){
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        
        System.out.println("开始处理-----");
        
        Object result = method.invoke(target, args);
        
        System.out.println("处理完成-----");
        
        return result;
    }

}

 

 

 

 

    public static void main(String[] args) {

        Target target = (Target) Proxy.newProxyInstance(TargetImpl.class.getClassLoader(),
            TargetImpl.class.getInterfaces(), new MyInvocationhandler(new TargetImpl()));
        
        target.doSomething();

    }

 

 

输出结果:

 

开始处理-----
doSomething 方法开始执行----
处理完成-----

 

 

动态代理的原理:
动态代理和普通的代理模式的区别,就是动态代理中的代理类是由java.lang.reflect.Proxy类在运行期时根据接口定义,采用Java反射功能动态生成的。和java.lang.reflect.InvocationHandler结合,可以加强现有类的方法实现。如图2,图中的自定义Handler实现InvocationHandler接口,自定义Handler实例化时,将实现类传入自定义Handler对象。自定义Handler需要实现invoke方法,该方法可以使用Java反射调用实现类的实现的方法,同时当然可以实现其他功能,例如在调用实现类方法前后加入Log。而Proxy类根据Handler和需要代理的接口动态生成一个接口实现类的对象。当用户调用这个动态生成的实现类时,实际上是调用了自定义Handler的invoke方法。

分享到:
评论

相关推荐

    JDK内置动态代理例子

    这个“JDK内置动态代理例子”旨在演示如何利用Java的反射API和`java.lang.reflect.Proxy`类来实现类似拦截器的功能。下面我们将深入探讨相关知识点。 首先,动态代理的核心在于`java.lang.reflect.Proxy`类。这个类...

    JDK动态代理proxy

    JDK动态代理,全称为Java Dynamic Proxy,是Java标准库提供的一种强大且灵活的机制,允许我们在运行时创建代理类来实现指定的接口。这种机制主要用于实现AOP(面向切面编程)或为已有接口提供额外的功能,如日志、...

    Spring Aop的底层实现技术 --- Jdk动态代理原理

    Spring AOP 的底层实现技术 --- Jdk 动态代理原理 JDK 动态代理是 Spring AOP 的底层实现技术,允许开发者在运行期创建接口的代理实例。在 JDK 1.3 以后,JDK 动态代理技术提供了实现 AOP 的绝好底层技术。JDK 动态...

    java-jdk动态代理的实现demo

    在Java中,JDK提供了一个`java.lang.reflect.Proxy`类和一个`java.lang.reflect.InvocationHandler`接口,它们是实现动态代理的关键。Proxy类用于创建代理对象,而InvocationHandler接口定义了处理方法调用的逻辑。 ...

    静态代理动态代理测试,模拟jdk实现动态代理

    在这个例子中,`DynamicProxy`实现了`InvocationHandler`接口,`getProxyInstance`方法返回的是一个动态生成的代理对象,这个代理对象能够调用`RealServiceImpl`的方法并附加额外的操作。 在实际应用中,动态代理常...

    Aop jdk proxy实现小例子

    JDK Proxy是Java提供的一种动态代理机制,它是实现AOP的一种方式。通过JDK Proxy,我们可以在运行时创建一个接口的实现类,并在调用接口方法时插入自定义的处理逻辑,这就是AOP的核心思想——“织入”(Weaving)。...

    JDK动态代理简单示例

    除了基本的代理实现,JDK动态代理还可以结合其他设计模式,如工厂模式,创建更加复杂的代理对象。此外,Spring框架中的AOP功能也是基于JDK动态代理或CGLIB实现的,它允许开发者定义切面,对满足特定条件的方法进行...

    JDK的动态代理总结

    在Java开发中,JDK的动态代理是一种非常重要的技术,它允许我们在运行时创建具有特定接口的代理类实例,从而实现代理对象对目标对象的方法调用进行拦截和增强。这篇博客将对JDK的动态代理进行深入的总结,探讨其原理...

    JDK动态代理和CGLIB代理

    JDK动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类用于创建一个代理对象,而InvocationHandler接口定义了处理代理对象的方法调用的逻辑。当通过Proxy创建...

    动态代理例子

    在Java中,动态代理基于JDK的java.lang.reflect包中的两个关键类:Proxy和InvocationHandler。Proxy类用于创建一个实现了特定接口的代理对象,而InvocationHandler接口定义了一个方法,这个方法会在代理对象调用目标...

    java jdk 动态代理 演示demo

    Java JDK提供了`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口,它们是实现动态代理的关键组件。`Proxy`类用于创建代理对象,而`InvocationHandler`接口定义了一个方法,用于处理代理对象...

    jdk动态代理 + 拦截器实现小例

    在这个“jdk动态代理 + 拦截器实现小例”中,我们将探讨如何利用Java的InvocationHandler接口和Proxy类来实现拦截器模式,以实现灵活的代码扩展和日志记录、性能监控等需求。 首先,让我们理解什么是动态代理。在...

    静态代理 动态代理 jdk Proxy

    自己写的小例子,供学习参考。 public class StaticProxy implements Hello{ private HelloSpecker helloSpecker; public StaticProxy() { } public StaticProxy(HelloSpecker helloSpecker) { super(); ...

    spring jdk动态代理

    Spring AOP允许我们通过代理来实现横切关注点,如日志、事务管理等,而JDK动态代理则是Spring AOP实现的一种方式。本文将深入探讨Spring如何利用JDK动态代理技术来实现这一功能,并通过实例解析其底层实现。 首先,...

    JDK和CGlib分别实现的动态代理源代码

    两者在性能上,CGlib通常比JDK代理稍快,但创建代理的过程相对复杂。选择哪种代理方式取决于具体的需求和项目情况。了解并掌握这两种动态代理技术,能够使你在处理AOP(面向切面编程)等高级编程需求时游刃有余。

    java动态代理例子

    这里我们将深入探讨两个主要的Java动态代理实现:JDK动态代理和CGLIB动态代理。 **JDK动态代理**: JDK动态代理基于Java接口实现,适用于目标对象实现了至少一个接口的情况。它通过`java.lang.reflect.Proxy`类和`...

    动态代理(AOP)简单例子

    在这个"动态代理(AOP)简单例子"中,可能会展示如何使用JDK或CGLIB创建代理对象,以及如何使用匿名类实现InvocationHandler接口。同时,通过对比直接调用和动态调用,可以更直观地理解动态代理带来的优势。这个例子...

    JDK的动态代理

    总的来说,JDK的动态代理是一个强大的工具,它通过反射和接口实现了在运行时创建代理类的能力,使得我们可以方便地进行方法调用的增强和扩展,为软件开发提供了更大的灵活性。深入理解和掌握这一特性,对于提升Java...

    spring-demo16-JDK动态代理.zip

    这个例子可以帮助开发者理解如何在实际应用中利用JDK动态代理来实现功能扩展,以及如何在Spring框架中无缝集成这一特性。通过实践这个示例,开发者可以更好地掌握面向切面编程的精髓,提升代码的可维护性和灵活性。

    Java 代理 代理模式 静态代理与动态代理 常见的动态代理实现 .md

    在Java中,最常用的动态代理实现有两种:JDK Proxy和CGLIB。 - **JDK Proxy**:基于Java反射API实现,仅支持接口的代理。使用JDK Proxy时,需要指定被代理接口的类型,并且代理类必须实现该接口。 - **CGLIB**:...

Global site tag (gtag.js) - Google Analytics