动态代理

原创 2018年04月15日 23:00:01

看的视频https://www.bilibili.com/video/av18092969?from=search&seid=10237606488800747275
张三要相亲,父母作为代理类帮张三打理相亲事宜。用到JDK的接口InvocationHandler和Proxy类。
代理类Parent实现InvocationHandler接口,先拿到被代理对象的引用,可以添加before和after方法。中间才执行被代理对象的方法。
张三继承People接口,People接口里有相亲这个方法。父母拿到People对象的实例,表明可以帮助该对象执行方法,并且增强该方法,比如前期准备,相亲完办酒席等。
用JDK Proxy.newProxyInstance方法去创建代理类的实例,传入People接口,表示动态代理能代理接口中的方法,只要有方法是实现了该接口,并调用了该方法,都可以用Proxy.newProxyInstance生成代理对象。这个就是动态代理不同于静态代理的地方。静态代理中代理类有具体被代理类的引用,增强的是具体代理类的方法。而动态代理类能实现接口的方法,只要有类实现该接口,并且调用了该方法,动态代理就能生成具体的代理类,并增强该方法。

package 面试知识点.动态代理;


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

/**
 * Created by Administrator on 2018/4/15 0015.
 */
public class Main {
    public static void main(String[] args) {
        ZhangSan zhangSan = new ZhangSan();
        People people =(People)Proxy.newProxyInstance(People.class.getClassLoader(), new Class[]{People.class}, new Parent(zhangSan));
        people.xiangqin();
    }
}


interface People {
    void xiangqin();
}

class Parent implements InvocationHandler {
    //代理类先拿到被代理对象的引用
    People people;

    public Parent(People people) {
        this.people = people;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        people.xiangqin();
        after();
        return null;
    }

    public void before() {
        System.out.println("相亲之前,父母帮忙准备相亲");
    }

    public void after() {
        System.out.println("相亲之后,父母帮忙结婚");
    }
}

class ZhangSan implements People {

    @Override
    public void xiangqin() {
        System.out.println("张三相亲");
    }
}

jdk的动态代理是如何调到invoke方法的?

java动态代理(重要).

  • 2011年06月24日 22:54
  • 5KB
  • 下载

动态代理——从一窍不通到恍然大悟

从具体的例子出发,由浅入繁介绍代理这种设计模式和具体可以处理的问题
  • u011026779
  • u011026779
  • 2017-04-02 22:50:02
  • 1783

动态代理的几种方式

AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执...
  • Happy_wu
  • Happy_wu
  • 2017-12-19 14:34:33
  • 7126

动态代理(2)----动态代理和AOP

根据前面介绍的Proxy和InvocationHandler,实在很难看出这种动态代理的优势,下面介绍一种更实用的动态代理机制.只要我们开发一个实际使用的软件系统,总会出现相同代码重复出现的情形,在这...
  • beijiguangyong
  • beijiguangyong
  • 2013-02-28 22:09:27
  • 4347

Java反射机制详细示例及动态代理

反射可以在程序运行过程中动态获取类的相关信息,包括类由哪个类加载器进行加载,类中的成员变量,成员方法,访问修饰符,返回值类型,构造方法等等; 首先要获取类的Class对象.获取Class对象有三种方法...
  • qgfjeahn
  • qgfjeahn
  • 2016-09-30 10:14:22
  • 3096

黑马程序员--装饰设计模式和动态代理

装饰设计模式: 装饰设计模式解决:对一组类进行功能的增强。 包装:写一个类(包装类)对被包装对象进行包装;  * 1、包装类和被包装对象要实现同样的接口;  * 2、包装类要持有一个被包装对象;  *...
  • u014481780
  • u014481780
  • 2015-05-10 19:18:34
  • 634

jdk动态代理示例以及代码原理分析

相信很多人在刚刚学习Java时,会感觉【动态代理】晦涩难懂,只知道如何来调用它,却不知道它的实现细节。本文通过根据JDK源码,展示这些细节,以期能对JDK的动态代理有深入的理解。 简单示例代码 pub...
  • PKWind
  • PKWind
  • 2016-12-09 14:49:21
  • 1077

动态代理应用场景 Java

package com.lcj.dongtaidaili;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Me...
  • AniuLincion
  • AniuLincion
  • 2015-08-18 17:47:11
  • 935

JDK动态代理_JDK动态代理

  • 2009年10月18日 10:56
  • 32KB
  • 下载
收藏助手
不良信息举报
您举报文章:动态代理
举报原因:
原因补充:

(最多只允许输入30个字)