博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态代理
阅读量:4049 次
发布时间:2019-05-25

本文共 1020 字,大约阅读时间需要 3 分钟。

-- Start

Java 的反射功能很强大, 但是我们并不能通过反射实例化一个接口, 也不能动态定义一个新类. 为了解决这个问题, 我们可以利用动态代理在运行时创建一个实现了一组给定接口的新类, 只有在编译时无法确定需要实现哪个接口时才使用代理.

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class Test {	public static void main(String[] args) throws Exception {		// 定义 InvocationHandler		InvocationHandler h = new InvocationHandler() {			// 任何对代理对象方法的调用都将委托给此方法			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {				System.out.println(method.getName() + " invoked.");				return "";			}		};				// 动态定义及实例化一个实现了类 A 和 B 的的对象, 相当于 extends Proxy implements A, B		Proxy proxy = (Proxy) Proxy.newProxyInstance(Test.class.getClassLoader(), new Class[] { A.class, B.class }, h);				// 转换为 A		A a = (A) proxy;		a.a1();		a.a2();				// 转换为 B		B b = (B) proxy;		b.b1();		b.b2();	}}interface A {	void a1();	void a2();}interface B {	void b1();	void b2();}

---
更多参见:
--
声 明:转载请注明出处
-- Last Updated on 2012-05-28
-- Written by ShangBo on 2012-05-28
-- End
你可能感兴趣的文章
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
Android/Linux 内存监视
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>