JDK动态代理简介

动态代理

代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理、过滤、事后处理等服务,动态代理及通过反射机制动态实现代理机制。JDK 中的 java.lang.reflect.Proxy 类可以用来实现动态代理。

首先,准备一个简单的接口和实现类

/**
 * 接口 IHello.java
 */
public interface IHello {
    void hello();
}
/**
 * 实现类 Hello.java
 */
public class Hello implements IHello {
    @Override
    public void hello() {
        System.out.println("我是Hello.");
    }
}

通过 Proxy 实现动态代理

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

import org.junit.Test;

public class HelloTest {
    @Test
    public void testProxy() throws Exception {
        final IHello hello = new Hello();

        /*
         * proxyHello    : 代理主题角色,代理类的实例
         * IHello        : 抽象主题角色,代理类和被代理类都需要实现的接口,JDK中的动态代理必须针对接口
         * hello         : 真实主题角色,被代理类的实例
         */
        IHello proxyHello = (IHello) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
                new Class[] { IHello.class }, new InvocationHandler() {

                    /*
                     * proxy : 当前代理类的一个实例; 若调用proxy的非final方法,将造成无限循环调用
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                        // 前期的业务逻辑操作
                        System.out.println("---开始");

                        // 调用被代理类的方法,传入参数args,得到返回
                        Object object = method.invoke(hello, args);

                        // 后期的业务逻辑操作
                        System.out.println("---结束");

                        return object;
                    }
                });

        proxyHello.hello();
    }
}

返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 接口
, 代理
, java动态代理
, java 代理 jdk代理
, 动态
, 动态代理
, public
, pring 动态代理
, Hello
, jdk动态代理
, 代理类
, 反射和动态代理
java动态代理模式
jdk动态代理、jdk动态代理实现原理、jdk 动态代理详解、jdk 动态代理原理、jdk动态代理 cglib,以便于您获取更多的相关知识。

时间: 2025-01-09 07:07:24

JDK动态代理简介的相关文章

spring入门(13) JDK动态代理

首先我们来了解一下java中的代理模式,代理模式的英文叫做Proxy或Surrogate,中文都可译为"代理",所谓代理,就 是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象 ,而代理对象可以在客户端和目标对象之间起到中介的作用. 1.抽象主题角色 声明了真实主题和代理主题 的共同接口,这样一来在任何可以使用真实主题的地方都可以是使用代理主题 2.代理主题(Proxy)角色: 代理主题角色内部含有对真实主题的引用,从而可以在任

spring学习笔记(6)AOP前夕[1]jdk动态代理实例解析

JDK动态代理技术 动态代理最常见应用是AOP(面向切面编程).通过AOP,我们能够地拿到我们的程序运行到某个节点时的方法.对象.入参.返回参数,并动态地在方法调用前后新添一些新的方法逻辑,来满足我们的新需求,比如日志记录等. 动态代理常见有两种方式:基于JDK的反射技术的动态代理和基于CGLib的动态代理. 使用反射技术创建动态代理 JDK创建动态代理的核心是java.lang.reflect.InvocationHandler接口和java.lang.reflect.Proxy类.让我们先分

java代理 jdk动态代理应用案列_java

java代理有jdk动态代理.cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包) 原理是(歌手.经纪人做例子): 建立一个公共的接口,比如:歌手public interface Singer: 用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger implements Singer 建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invok

java jdk动态代理详解_java

jdk动态代理要对一个类进行代理,被代理的类必须实现至少一个接口,并且只有接口中的方法才能被代理. jdk实现动态代理一般分为三步: 1. 编写接口和实现类. 2. 写一个处理器,该处理器实现InvocationHandler接口,该接口只有一个方法,其签名为public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;可在该处理器的实现方法中,在方法调用前和调用后加入自己的代码,从而进行动态拦截

深入理解JDK动态代理机制

一.现实生活中的代理?         在现实生活中,我们常见的有服务器代理商.联想PC代理商.百事可乐.火车票.机票等代理商,为什么会有这些个代理商呢?设想以买火车票为场景,如果我要买一张从广州去长沙的火车票,就必须去火车站排队购票,如果排队的人比较多的话,非常的耽误时间.但有了火车票代理商之后,我就可以直接去找个离我最近的代理商买票,因为这样的代理商不止一个二个,遍布全市各地. 所以代理商的出现不但减轻了火车站售票员的工作压力,同时也为市民购票提供了许多方便.只是代理商会收5块的手续费.从这

spring源码学习之【准备】jdk动态代理例子

一:被代理的对象所要实现的接口 1 package com.yeepay.testpoxy; 2 3 import java.util.Map; 4 5 /** 6 * 被动态代理的接口 7 * @author shangxiaofei 8 * 9 */ 10 public interface MyCheckPay { 11 /** 12 * 付钱的接口 13 * @param name 14 * @param money 15 * @return 16 */ 17 public Map<Str

Spring AOP源码分析(四)Spring AOP的JDK动态代理

本篇文章将会介绍上一个例子中的源码执行情况,从中熟悉整个SpringAOP的一些概念和接口设计.  首先整个SpringAOP的分两大过程.  第一个过程:根据xml文件或者注解中配置的拦截信息,生成相应的代理对象,这个代理对象包含了对应的拦截器.  第二个过程:执行所拦截的方法时,就是调用代理对象的执行逻辑,完成各种拦截.  本文章先对第二个过程进行源码解析.  对第一个过程先做简单概述,如果拦截的类的对应方法是接口方法,则使用JDK的Proxy进行代理对象的创建否则使用CGLIB进行代理对象

JDK和CGLIB生成动态代理类的区别

 关于动态代理和静态代理 当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象. 按照代理对象的创建时期不同,可以分为两种: 静态代理:事先写好代理对象类,在程序发布前就已经存在了: 动态代理:应用程序发布后,通过动态创建代理对象. 静态代理其实就是一个典型的代理模式实现,在代理类中包装一个被代理对象,然后影响被代理对象的行为,比较简单,代码就不放了. 其中动态代理又可分为:JDK动态代理和CGLIB代理. 1.JDK动态代理

动态代理解释-JDK,CGLIB,JAVASSIST,ASM

动态代理是指在运行时,动态生成代理类.代理类的字节码将在运行时生成并载入当前的ClassLoader.          生成动态代理类的方法很多,如JDK自带的动态代理.CGLIB.Javassist或者ASM库.           JDK动态代理使用简单,它内置在JDK中,因此不需要引入第三方Jar包,但相对功能比较弱.CGLIB和Javassist都是高级的字节码生成库,总体性能比JDK自带的动态代理好,而且功能十分强大.ASM是低级的字节码生成工具,使用ASM已经近乎在于使用Javab