11.2 创建动态代理实例即调用其方法
来源:互联网 发布:淘宝找人代付选项没了 编辑:程序博客网 时间:2024/05/21 16:56
p { margin-bottom: 0.21cm; }
得到动态代理的构造方法的字节码方法:
Constructorconstructor = clazzProxy1
.getConstructor(InvocationHandler.class);
创建动态代理需要传入一个InvocationHandler InvocationHandler是一个接口 我们需要定义一个类 实现该接口然后在实例化动态代理类MyInvocationHandler1是实现了InvocationHandler接口的类
Collectionproxy1 = (Collection) constructor
.newInstance(newMyInvocationHandler1());
创建动态类及实例对象需要做三个操作:
生成类中的方法有哪些通过让其实现哪些接口类的方式告知
产生的类字节码必须有一个关联的类加载器对象
创建对象创建对象时给他传递一个InvocationHandler参数进去
实现InvocationHandler接口的类有三种写法写法
用Proxy.newProxyInstance()创建实例对象可以将得到字节码,实例化实现InvocationHandler类的对象创建Proxy对象溶为一体
得到字节码,创建实现InvocationHandler接口的类 实例化对象 传递参数全部分开写
//得到构造方法的字节码
Constructorconstructor = clazzProxy1
.getConstructor(InvocationHandler.class);
//2创建实现InvocationHandler接口的类
classMyInvocationHandler1 implementsInvocationHandler {
@Override
publicObject invoke(Object proxy, Method method, Object[] args)
throwsThrowable {
//TODOAuto-generated method stub
returnnull;
}
}
//实例化对象传递参数
Collectionproxy1 = (Collection) constructor
.newInstance(newMyInvocationHandler1());
创建实现InvocationHandler接口的类 实例化对象传递参合二为一在实例化的时候创建实现InvocationHandler接口的类
//得到构造方法的字节码
Constructorconstructor = clazzProxy1
.getConstructor(InvocationHandler.class);
//得到实例对象在实例化的时候创建实现InvocationHandler接口的类
Collectionproxy2 = (Collection) constructor
.newInstance(newInvocationHandler() {
@Override
publicObject invoke(Object proxy, Method method,
Object[]args) throwsThrowable {
//TODOAuto-generated method stub
returnnull;
}
});
将创建字节码和创建代理对象实例化对象传递参都溶为一体
System.out.println("第三种方式定义实例对象将创建字节码和创建代理对象合二为一");
Collectionproxy3 = (Collection) Proxy.newProxyInstance(
Collection.class.getClassLoader(),newClass[]{Collection.class},
newInvocationHandler() {
@Override
publicObject invoke(Object proxy, Method method,
Object[]args) throwsThrowable {
ArrayListtarget = new ArrayList();
longbeginTime = System.currentTimeMillis();
ObjectreVal = method.invoke(target, args);
longendTime = System.currentTimeMillis();
System.out.println(method.getName()+"runing time"+(beginTime- endTime));
returnreVal;
}
});
- 11.2 创建动态代理实例即调用其方法
- Java动态代理-创建动态类的实例对象及调用其方法
- 【Java进阶-Java动态代理与AOP】03 创建动态类的实例对象及调用其方法
- iOS中创建动态链接库及调用其方法
- Java动态代理-创建动态类及查看其方法列表信息
- 【经典实例】利用C#反射动态编译代码,创建类的实例,并调用其成员
- Java 代理类(一) 创建动态类及查看其方法列表信息
- 动态调用方法实例
- 利用反射来动态创建实例和调用方法
- 利用反射来动态创建实例和调用方法
- 利用反射来动态创建实例和调用方法
- 利用反射来动态创建实例和调用方法
- 利用反射来动态创建实例和调用方法
- 静态方法不能直接调用实例方法和变量,但可以间接调用(即在静态方法中创建类的实例,然后调用)
- 如何的获得动态类的实例对象、调用其方法及InvocationHandler的运行原理
- 【Java进阶-Java动态代理与AOP】02 创建动态类及查看其方法列表信息
- 动态代理类的创建实例
- java动态代理对象实例的创建
- the very beginning
- 2011又一给力神曲啊!!~《神马》—肖玄、瞬间秒杀你。
- 11.1 创建动态类及其查看其方法列表信息
- 标准输入与getchar()
- 架构师之路:如何做一个好的产品架构师
- 11.2 创建动态代理实例即调用其方法
- 架构师之路:学会设计模式
- 11.3 InvocationHandler对象运行原理
- 11.4 可执行代理和插入通告的通用方法
- 11.5 将代理方法封装成一个类(通用)
- 11.6实现一个类似于spring的可配置的AOP框架
- 12.1 AWT的基础知识和Frame类
- 12.2 事件监视器XxxListener
- POJ-1065-Wooden Sticks-贪心-多关键字排序