JDK动态代理是基于接口的代理,下面举例说明

  • 代理类:proxy,代理动作必须要基于一个proxy实例来执行
  • 代理执行类:实现InvocationHandler,案例中是TestInvocationHandler
  • 被代理类:基于接口的用户自己的方法,案例中是SayImpl

首先说明下InvocationHandler的invoke

public interface InvocationHandler {
  public Object invoke(Object proxy, Method method, Object[] args)
  throws Throwable;
}

proxy:方法基于哪个proxy实例来执行

method:执行proxy实例的哪个方法(proxy代理谁就执行谁的方法)

args:methed的入参

代码示例:

public interface Say {
void sayHello(String words);
}
public class SayImpl implements Say {
@Override
public void sayHello(String words) {
System.out.println("hello:" + words);
}
}
public class TestInvocationHandler implements InvocationHandler {

    private Object target;
public TestInvocationHandler(Object target) {
this.target=target;
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("invoke begin");
System.out.println("method :"+ method.getName()+" is invoked!");
method.invoke(target,args);
System.out.println("invoke end");
return null;
}
}
    public static void main(String[] args) {

        TestInvocationHandler testInvocationHandler = new TestInvocationHandler(new SayImpl());
Say say = (Say)Proxy.newProxyInstance(SayImpl.class.getClassLoader(), SayImpl.class.getInterfaces(), testInvocationHandler );
say.sayHello("my dear");
}

执行结果:

invoke begin
method :sayHello is invoked!
hello:my dear
invoke end

jdk动态代理举例的更多相关文章

  1. java jdk动态代理模式举例浅析

    代理模式概述 代理模式是为了提供额外或不同的操作,而插入的用来替代”实际”对象的对象,这些操作涉及到与”实际”对象的通信,因此代理通常充当中间人角色. java中常用的动态代理模式为jdk动态代理和c ...

  2. 举例理解JDK动态代理

    JDK动态代理 说到java自带的动态代理api,肯定离不开反射.JDK的Proxy类实现动态代理最核心的方法: public static Object newProxyInstance(Class ...

  3. CGlib和JDK动态代理

    一.CGlib动态代理     JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了.CGLib采用了非常底层的1:字节码技术,其原理是通过字节 ...

  4. jdk动态代理和cglib动态代理底层实现原理超详细解析(jdk动态代理篇)

    代理模式是一种很常见的模式,本文主要分析jdk动态代理的过程 1.举例 public class ProxyFactory implements InvocationHandler { private ...

  5. 代理模式详解:静态代理、JDK动态代理与Cglib动态代理

    代理模式简介分类 概念 ​ 代理,是为了在不修改目标对象的基础上,增强目标方法的业务逻辑. ​ 客户类需要执行的是目标对象的目标方法,但是真正执行的是代理对象的代理方法,客户类对目标对象的访问是通过代 ...

  6. JDK动态代理

    一.基本概念 1.什么是代理? 在阐述JDK动态代理之前,我们很有必要先来弄明白代理的概念.代理这个词本身并不是计算机专用术语,它是生活中一个常用的概念.这里引用维基百科上的一句话对代理进行定义: A ...

  7. 静态代理和利用反射形成的动态代理(JDK动态代理)

    代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...

  8. Spring中的JDK动态代理

    Spring中的JDK动态代理 在JDK1.3以后提供了动态代理的技术,允许开发者在运行期创建接口的代理实例.在Sun刚推出动态代理时,还很难想象它有多大的实际用途,现在动态代理是实现AOP的绝好底层 ...

  9. AOP学习心得&jdk动态代理与cglib比较

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...

随机推荐

  1. SimpleMembership

    最近2个月以来,一直在学习MVC,从最开始的2,一直到最新的4.从原来的aspx到现在的Razor引擎,越学越开心,越学越上瘾. 最近为新项目做准备,打算用MVC4,VS2012+SQL2012,反正 ...

  2. Python 面向对象(一) 基础

    Python 中一切皆对象 什么是面向对象? 面向对象就是将一些事物的共有特征抽象成类,从类来创建实例. 类class 可以理解为模版 比如人类,都具有身高.体重.年龄.性别.籍贯...等属性,但属性 ...

  3. python基础教程——dict和set

    dict python内置字典:dict,全称dictionary,在其他语言中称为map,使用键值对存储. ex: d = {'xiaoli' : 95 , 'xiaoming' : 98 , 'x ...

  4. ASP.NET异常处理机制

    try{ //获取并使用资源,可能出现异常}catch(DivideByZeroException de){}catch(ArithmeticException ae){}catch(Exceptio ...

  5. 一个简单的迷你jQuery实现

    //仅提供与学习使用(function () { var _$ = window.$; var _jQuery = window.jQuery; //暴露外部使用的一个接口 var jQuery = ...

  6. F - Capture

    F - Capture 题链 题意 给你两种颜色的物品,有n组,每组有第一种颜色有w个,第二种为d个,每组必须选一种,求最后第一种颜色占的比值不低于K的最少需要选第一种的组数. 思路 首先没组都选第一 ...

  7. python语言 第一个程序

    print("hello word!") # for i in range(1, 10):# for j in range(1, 10):# print(j, "x&qu ...

  8. SQL语言(一)

    设计表student如下

  9. Jfinal启动原理及源码简析

    以下所有源码只截取了部分代码,标题即为类名 1.Web.xml <filter-name>jfinal</filter-name> <filter-class>co ...

  10. MLR算法[Paper笔记]

    介绍 MLR算法是alibaba在2012年提出并使用的广告点击率预估模型,2017年发表出来. 如下图,LR不能拟合非线性数据,MLR可以拟合非线性数据,因为划分-训练模式. 讨论,非线性拟合能力: ...