JavaSE---使用反射生成JDK动态代理
1、概述
1.1 在Java.lang.reflect包下,提供了Proxy类、InvocationHandler接口,使用它们可以生成JDK动态代理类或动态代理对象;
1.2 【Proxy类】
1.1.1 Proxy类是所有动态代理类的父类;
1.1.2 Proxy类提供 用于创建动态代理类、动态代理对象的静态方法;
1.1.3 在程序中,为 一个或多个接口 动态地生成实现类,可以使用Proxy创建动态代理类;
为 一个或多个接口 动态地生成实例,可以使用Proxy创建动态代理对象;
1.1.4 创建动态代理类、动态代理对象的方法
a, public static Class<?> getProxyClass(ClassLoader loader,Class<?>... interfaces)
创建一个动态代理类 所对应的Class对象,该代理类将实现interfaces所指定的所有接口;
loader:指定生成动态代理类的类加载器;
b, public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
直接创建一个 动态代理对象,该代理对象的实现类 实现了interfaces指定的所有接口;
*****执行代理对象的每个方法时 实际上都是 执行InvocationHandler对象的invoke方法;
2、案例
package com.exiuge.mytest.dongtaidaili;
public interface Person {
void say(String s);
void walk();
}
package com.exiuge.mytest.dongtaidaili;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvokationHandler implements InvocationHandler {
/**
* 执行代理对象的方法时,都会被替换成执行下面的invoke方法
* @param proxy 动态代理对象
* @param method 正在执行的方法
* @param args 执行代理对象的方法的传入参数
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("正在执行的代理对象的方法:"+method);
if (args!=null){
System.out.println("正在执行的代理对象的方法的传入参数");
for (Object o:args) {
System.out.println(o);
}
}else {
System.out.println("正在执行的代理对象的方法没有传入参数");
}
return null;
}
}
package com.exiuge.mytest.dongtaidaili;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args){
//创建自定义的InvocationHandler
InvocationHandler invocationHandler=new MyInvokationHandler();
//生成指定接口的动态代理对象
Person person=(Person)Proxy.newProxyInstance(Person.class.getClassLoader(),new Class[]{Person.class},invocationHandler);
person.say("hello");
person.walk();
}
}
执行结果:

JavaSE---使用反射生成JDK动态代理的更多相关文章
- 利用反射生成JDK动态代理
利用反射生成JDK动态代理 在Java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成JDK动态代理类和动态代理 ...
- Java基础之反射生成JDK动态代理
在Java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口.通过这个类和接口可以生成JDK动态代理类或动态代理对象. JDK动态代理例子: / ...
- MyBatis之反射技术+JDK动态代理+cglib代理
一.反射 引用百度百科说明: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功 ...
- Java 反射之JDK动态代理
Proxy提供用于创建动态代理类和代理对象的静态方法,它也是所有动态代理类的父类.如果我们在程序中为一个或多个接口动态地生成实现类,就可以使用Proxy来创建动态代理类:如果需要为一个或多个接口动态的 ...
- MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)
在介绍MyBATIS插件原理前我们需要先学习一下一些基础的知识,否则我们是很难理解MyBATIS的运行原理和插件原理的. MyBATIS最主要的是反射和动态代理技术,让我们首先先熟悉它们. 1:Jav ...
- 静态代理和利用反射形成的动态代理(JDK动态代理)
代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...
- JDK动态代理[4]----ProxyGenerator生成代理类的字节码文件解析
通过前面几篇的分析,我们知道代理类是通过Proxy类的ProxyClassFactory工厂生成的,这个工厂类会去调用ProxyGenerator类的generateProxyClass()方法来生成 ...
- 深挖JDK动态代理(二):JDK动态生成后的字节码分析
接上一篇文章深挖JDK动态代理(一)我们来分析一下JDK生成动态的代理类究竟是个什么东西 1. 将生成的代理类编程一个class文件,通过以下方法 public static void transCl ...
- JAVA-获取 JDK 动态代理生成的 Class 文件
可指定路径 import sun.misc.ProxyGenerator; import java.io.FileOutputStream; import java.io.IOException; i ...
随机推荐
- cakephp目录结构
- 简单VBS教程.RP
Mimick同菜鸟==.文转豆瓣~:https://www.douban.com/note/88562379/ 讲一下VBScript.主要面向菜鸟,懂得编程的朋友就不要浪费时间了,如果你想接触以下V ...
- SDKD 2017 Summer Single Training #03
今天的题目有 6 个. 第一题: CodeForces - 400D Dima and Bacteria 这个题实际是不难的,难的可能在题意的理解上还有题干有点长,这个题很考察题意上面,知识点很熟悉 ...
- Data Base 常用数据库之top/limit/rownum用法
常用数据库之top/limit/rownum用法 一.常用数据库: sql server: select top 10 from users where status=1 mysql: select ...
- poj2409(polya 定理模板)
题目链接:http://poj.org/problem?id=2409 题意:输入 m, n 表示有 m 种颜色,要构造一个长度为 n 的手环,旋转和对称的只算一种,问能组成多少个不同的手环. 思路: ...
- (vue.js)import "mint-ui/lib/stylecss"失败
在vue2.0中引入了mint-ui后总是报一个css的错误 但是package.json中已经配置了css-loader style-loader ,webpack.config中也已经配置了css ...
- xPath在C#中运用
<?xml version="1.0" encoding="utf-8" ?> <pets> <cat color=" ...
- Chrome插件-Postman Interceptor
postman有一个chrome插件 Postman Interceptor,可以让postman中发送请求的时候使用这个网站的浏览器cookie Postman Interceptor,可以让pos ...
- oracle随笔
Oracle新建数据库(新用户) 1.首先,创建(新)用户: create user username identified by password; username:新用户名的用户名 passwo ...
- UICollectionView Layout自定义 Layout布局
from: http://www.tuicool.com/articles/vuyIriN 当我们使用系统自带的UICollectionViewFlowLayout无法实现我们的布局时,我们就可以 ...