详解Java动态代理的实现及应用

Java动态代理其实写日常业务代码是不常用的,但在框架层一起RPC框架的客户端是非常常见及重要的。spring的核心思想aop的底层原理实现就使用到了java的动态代理技术。
使用代理可以实现对象的远程调用以及aop的实现。
java的动态代理的实现,主要依赖InvoctionHandler(接口)和Proxy(类)这两个。
下面是一个例子
实现的代理的一般需要有个接口
package com.yasin.ProxyLearn;
public interface IStudy {
public void learn();
public String getKonwledge();
}
该接口的实现的类
package com.yasin.ProxyLearn;
public class Study implements IStudy{
public void learn() {
System.out.println("我要开始学习了!");
}
public String getKonwledge() {
return "Java真的强";
}
}
代理类,该类需要实现InvacationHandler接口
package com.yasin.ProxyLearn;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class StudyProxy implements InvocationHandler{
//真实要被代理的对象
private Object study;
public StudyProxy(Object study){
this.study=study;
}
/**
* 当被代理对象执行自己的方法时,便会执行这个方法
*/
public Object invoke(Object object, Method method, Object[] args) throws Throwable {
Object obj=null;
System.out.println("代理执行前我可以执行一些操作");
//执行被代理对象的方法
obj = method.invoke(study, args);
System.out.println("代理执行后我还可以执行一些操作");
return obj;
}
}
测试类
package com.yasin.JavaLearn;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import com.yasin.ProxyLearn.IStudy;
import com.yasin.ProxyLearn.Study;
import com.yasin.ProxyLearn.StudyProxy;
/**
* Hello world!
*
*/
public class App {
public static void main(String[] args) {
IStudy study = new Study();
InvocationHandler handler = new StudyProxy(study);
IStudy proxyStudy =(IStudy)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] {IStudy.class}, handler);
proxyStudy.learn();
System.out.println(proxyStudy.getKonwledge());
}
}
以上就是java动态代理的基础使用,在spring aop及rpc的远程服务端的实现要比这复杂下,以后会在深入探讨的。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java动态代理
# Java动态代理的实例
# Java动态代理使用方法
# Java中的引用和动态代理的实现详解
# JAVA提高第八篇 动态代理技术
# Java 动态代理原理分析
# 浅谈Java注解和动态代理
# java 中动态代理机制的实例讲解
# Java动态代理机制的实例详解
# JAVA中的静态代理、动态代理以及CGLIB动态代理总结
# Java动态代理(设计模式)代码详解
# 自己的
# 是一个
# 我要
# 我还
# 有个
# 如有
# 但在
# 会在
# 这两个
# 希望能
# 要比
# 便会
# 可以实现
# 谢谢大家
# 服务端
# 客户端
# 疑问请
# strong
# InvacationHandler
# println
相关文章:
广州美橙建站如何快速搭建多端合一网站?
已有域名如何免费搭建网站?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
已有域名和空间,如何快速搭建网站?
制作旅游网站html,怎样注册旅游网站?
制作网页的网站有哪些,电脑上怎么做网页?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
javascript基本数据类型及类型检测常用方法小结
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
海南网站制作公司有哪些,海口网是哪家的?
,网站推广常用方法?
Android自定义控件实现温度旋转按钮效果
常州企业建站如何选择最佳模板?
如何用西部建站助手快速创建专业网站?
建站之星备案流程有哪些注意事项?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
建站OpenVZ教程与优化策略:配置指南与性能提升
建站中国官网:模板定制+SEO优化+建站流程一站式指南
大同网页,大同瑞慈医院官网?
已有域名和空间如何快速搭建网站?
实现虚拟支付需哪些建站技术支撑?
想学网站制作怎么学,建立一个网站要花费多少?
如何选择服务器才能高效搭建专属网站?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
建站之星展会模版如何一键下载生成?
建站10G流量真的够用吗?如何应对访问高峰?
如何用低价快速搭建高质量网站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
常州企业网站制作公司,全国继续教育网怎么登录?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
制作网站怎么制作,*游戏网站怎么搭建?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何做静态网页,sublimetext3.0制作静态网页?
建站之星备案是否影响网站上线时间?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
php json中文编码为null的解决办法
如何在云主机快速搭建网站站点?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何高效生成建站之星成品网站源码?
如何在局域网内绑定自建网站域名?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
重庆市网站制作公司,重庆招聘网站哪个好?
如何选择高效响应式自助建站源码系统?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。