java代理基础类1.0
2018-09-01 05:41:57来源:博客园 阅读 ()
1.代理的书写,是比较麻烦的,写原生代理,又是一件无聊且容易遗漏的事情。写了一个简单的代理类,可借鉴也可指出错误。
1 package cn; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 import java.lang.reflect.Proxy; 6 7 /** 8 * 代理类的基础,必须先是设置对象(必须是接口对象赋值实现类),不然获取的代理对象会空指针。 9 * @author jxlys 10 * 11 */ 12 public class ProxyBase implements InvocationHandler { 13 private Object obj; 14 15 public ProxyBase() { 16 } 17 18 public ProxyBase(Object obj) { 19 this.obj = obj; 20 } 21 22 public Object getObj() { 23 return obj; 24 } 25 26 public void setObj(Object obj) { 27 this.obj = obj; 28 } 29 30 /** 31 * 获得代理对象 32 * 33 * @param t 34 * @return 35 */ 36 public <T> T getProxy(Class<T> t) { 37 return getObject(t, getProxy()); 38 } 39 40 /** 41 * 获得代理对象 42 */ 43 public Object getProxy() { 44 return obj != null ? Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this) : null; 45 } 46 47 // 对象强转 48 @SuppressWarnings("unchecked") 49 public <T> T getObject(Class<T> t, Object obj) { 50 return obj != null ? (T) obj : null; 51 } 52 53 public void beforeAction() { 54 } 55 56 public void afterAction() { 57 } 58 59 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 60 beforeAction(); 61 Object invoke = method.invoke(obj, args); 62 afterAction(); 63 return invoke; 64 } 65 }
调用如下:
1 interface A { 2 public void say(); 3 } 4 5 class B implements A { 6 7 public void say() { 8 System.out.print("love"); 9 } 10 } 11 12 public class TestMain { 13 14 public static void main(String[] args) { 15 A a = new B(); 16 a.say();//未代理17 ProxyBase pbu = new ProxyBase(a) { 18 public void beforeAction() { 19 System.out.print("I "); 20 } 21 22 public void afterAction() { 23 A a = getObject(A.class, getObj()); 24 System.out.print(" You!"); 25 } 26 }; 27 a = pbu.getProxy(A.class); 28 pbu = null;//这一步不重要,也可以没有。 29 a.say();// 已代理,也可以用继承的方式实现代理。 30 } 31 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:一个表单同时提交多条记录
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- 代理项 Surrogate 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash