文档章节

JDK的动态代理基本实现

嘴角轻扬30
 嘴角轻扬30
发布于 01/12 20:58
字数 437
阅读 7
收藏 0

动态,指的是代理类实在程序运行时创建的,而不是在程序运行前手动编码来定义代理类的。这些动态代理类是在运行时候根据我们在JAVA代码中的“指示”动态生成的。动态代理的使用方式呢,主要就是分为两种:一种是基于接口的代理;另一种则是基于类的代理。

基于接口的代理,就是jdk自带的动态代理规则的实现方式,后者则是基于一些字节类增强的类代理,如cglib,javassist等。
jdk代理最主要的就是三个类:目标接口,目标类(实现了目标接口),扩展处理器InvocationHandler类。

1.创建被代理的接口和类

//目标接口
public interface HelloInterfece {
    public void sayHello();
}

//目标类
public class HelloInterfeceImpl implements HelloInterfecr {
    @Override
    public void sayHello() {
        System.out.println("say..hello...");
    }
}

//扩展处理器
2.创建代理类实现InvocationHandler 接口
public class HelloProxy implements InvocationHandler {
    private Object target;
    public HelloProxy(Object 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;
    }
}

3.编写测试类
public class HelloProxyTest {

    public static void main(String[] args) {
        //实例化被代理对象
        HelloInterfecr helloInterfece = new HelloInterfeceImpl();
        //实例化代理对象
        HelloProxy helloProxy = new HelloProxy(helloInterfece);
        //建立代理关系
        HelloInterfecr helloInterfeceImpl = (HelloInterfecr) Proxy.newProxyInstance(helloInterfece.getClass().getClassLoader(), helloInterfece.getClass().getInterfaces(), helloProxy);
        //调用方法
        helloInterfeceImpl.sayHello();
    }
}

© 著作权归作者所有

共有 人打赏支持
嘴角轻扬30
粉丝 2
博文 43
码字总数 33652
作品 0
苏州
程序员
私信 提问
代理模式

代理模式一般分为两种,即静态代理和动态代理,静态代理限制比较严格,代理类和委托类必须实现相同的接口;而动态代理则更加灵活,除了jdk的动态代理,其他的代理方式,如cglib和javassist则...

high_m
2017/11/15
0
0
深入理解JDK动态代理机制

基于JDK8 Java中代理的实现一般分为三种 JDK静态代理 JDK动态代理 CGLIB动态代理 在Spring的AOP实现中,主要应用了JDK动态代理以及CGLIB动态代理。本文讨论关于JDK动态代理机制。 代理一般实...

芥末无疆sss
2017/11/13
0
0
源码解析--JDK动态代理

动态代理的两种方式JDK动态代理和cglib动态代理在上一篇中动态代理jdk和cglib的区别已经通过实例做了比较,那么动态代理的使用我们已经掌握了,但是知道了使用方法还远远不够,要想更深入了解...

激情的狼王丶21
2017/12/20
0
0
AOP的底层实现

原文:http://blog.csdn.net/yzllz001/article/details/54695954 AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础。它是一种面向切面编程的思想。关...

not_in_mountain
2017/10/12
0
0
java jdk与cglib动态代理模式的认识和实现

1.使用java jdk Proxy实现动态代理,该原理是反射机制。 建立一个普通的接口 package com.tester.cls.design.mode; public interface IUser { public String getName(); public void setNam......

IamOkay
2014/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

eggjs与sequelize简单demo

参考 egg 官方文档 安装 // 依赖npm install --save egg-sequelize mysql2// ts 类型npm install --save @types/sequelize 插件,config/plugin.ts import { EggPlugin } from 'egg';......

Geeyu
32分钟前
1
0
看过上百部片子的这个人教你视频标签算法解析

本文由云+社区发表 随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经...

腾讯云加社区
47分钟前
2
0
2. 红黑树

定义:红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树(Binary Search Tree)。 要理解红黑树,先要了解什么是二叉查找树。在上一章中,我们学习了什么是二叉树,以及二叉树...

火拳-艾斯
48分钟前
3
0
input的button类型,点击页面跳转

一、input type=button 不做任何操作 例如: <input type="button" class="btn btn-primary" style="width: 30%" value="返回" onclick="window.location.href='/users/list'"></input> onc......

Sunki
54分钟前
1
0
踩坑:js 小数运算出现精度问题

背景 在学习小程序商城源码时发现了这个问题,单价可能出现小数,小数之间运算结果会莫名其妙多出一大串数字,比如下面这样👇。 在此之前我是知道 js 中著名的 0.1 + 0.2 != 0.3 的问题的,...

dkvirus
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部