时间:2015-04-24 来源:

jdk动态代理和cglib代理总结 【数据库】

首先我们来谈谈jdk的动态代理承接网页制作,它允许开发者在运行期创建接口的代理实例,承接网页制作那么当我们在运行过程中调用某个实例的某个方法时,html静态页面制作可以使用代理对象去具体实现它,网站div+css从而达到aop的效果.

package com.yue.test; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class testHandler implements InvocationHandler{ private Object target; public testHandler(Object o){ this.target = o; } /* * 这里的method对象是java反射机制中的方法反射类对象符合w3c标准,通过这个方法反射对象可以调用目标对象中的方法 * 里面的target是目标类对象,手机html制作利用反射在目标类对象中找到对应的方法传入参数后调用 * 也可以说是根据目标对象得到的代理对象是在目标对象的基础上插入了横切逻辑的 * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.Object[]) */ @Override public Object invoke(Object proxy, Object[] args) throws Throwable { System.out.println("hey"); Object obj = method.invoke(target, args); System.out.println("end!"); return obj; } } package com.yue.test; public class PrivateCar implements Car{ public void say(){ System.out.println("spring is fun!"); } } package com.yue.test; public interface Car { public void say(); } package com.yue.test; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args){ PrivateCar pc = new PrivateCar(); testHandler th = new testHandler(pc); //这里因为生成的代理对象实现了目标对象的所有接口,承接网页制作所以根据多态可以变为Car类型 Car car = (Car)Proxy.newProxyInstance(pc.getClass().getClassLoader(), th); car.say(); } } 得到的结果是:

(1)jdk:除public外的所有方法都不可以被增强(注意public static也是不可以的)

(2)若要不是用于接口定义符合w3c标准,则需要用到cglib代理(这里需要格外引入jar包)

cglib代理使用底层的字节码技术,html切图制作可以为一个类创建子类网页外包接活,并在子类中采用方法拦截的技术拦截所有父类方法的调用,网页外包接活织入横切逻辑

下面我们来看代码:

hey spring is fun! end! 所以我们可以看到web前端制作,jdk动态代理的局限在于它只是在接口层次上的实现,web前端制作不能用在子类上

(2)cglib:private,static、final方法都不可以

package com.yue.test; public class Test { public static void main(String[] args){ CglibProxy cp = new CglibProxy(); PrivateCar pc = (PrivateCar)cp.getProxy(PrivateCar.class); pc.say(); } } package com.yue.test; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CglibProxy implements MethodInterceptor{ private Enhancer enhancer = new Enhancer(); /* * 这里的setSuperClass表示创建的代理对象是这个类的子类 * create方法表示使用字节码的方式创建子类对象 */ public Object getProxy(Class clazz){ enhancer.setSuperclass(clazz); enhancer.setCallback(this); return enhancer.create(); } /* * 每个父类方法的调用,div前端切图都会被这个intercept方法拦截住web切图报价, java.lang.reflect.Method, net.sf.cglib.proxy.MethodProxy) */ @Override public Object intercept(Object arg0, Object[] arg2, arg2); return obj; } } 总结:由于cglib代理创建代理对象时间比jdk代理多了差不多8倍承接网页制作,而创建出来的代理运行速率差不多是jdk创建出来的10倍,承接网页制作所以一般单例我们都使用cglib代理web切图报价,prototype就是用jdk代理

这里我们还必须注意的是,网站div+css因为jdk动态代理是使用接口创建符合w3c标准,cglib动态代理创建的是子类代理,手机html制作所以:

下面我们来看看代码:

(1)jdk的动态代理主要涉及两个类:proxy和invocacationHandler,invocationHandler里面包含了横切逻辑,网页外包接活并且可以使用反射调用目标类的方法(就是切点),proxy类主要是使用它的一个newinstance方法去创建一个代理实例.

点击次数:3233
作者:
web前端行业资讯
Web new NewsList
Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日苹果经典电脑Lisa源代码修复完成将于2018年开源 ,,2017年12月28日腾讯浏览指数发布年终榜单2017年人们都关注哪些AI话题? ,,2017年12月28日除了发现开普勒90,NASA还靠AI做了什么? ,,2017年12月28日柯洁宣布:明年4月,将再次与围棋AI交锋 ,,2017年12月28日百度无人车美国首秀CES将发布Apollo2.0 ,,2017年12月28日这四种技术发展趋势将在2018年改变世界 ,,2017年12月28日2017:谷歌DeepMind团队的年度回顾 ,,2017年12月28日封杀这个公式,AI智商将为零 ,,2017年12月28日微软AI高管:要让所有人、所有机构都用上人工智能 ,,2017年12月28日为什么Linux桌面年一直未到来 ,,2017年12月28日AppleLisa操作系统将开源 ,,2017年12月28日2018年9大技术趋势预测 ,,2017年12月28日谷歌研究院发布NIMA:能评价图像有多美,还能让图像变得更美 ,,2017年12月28日苹果为2019年iPhone开发大容量电池新技术 ,,2017年12月28日谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日继“Angel”开源后,腾讯又开放TDinsight机器学习平台 ,,2017年12月21日android自定义View——Bitmap使用详解2015年09月19日Linux下共享内存示例 【编程语言】2015年01月04日中职学前专业钢琴集体课教学改革探讨2015年01月07日codeforces267AA.Subtractions(辗转相除) 【编程语言】2015年09月08日Excel中特定单元格或区域的选定方法2014年01月28日【4.扫描节点】分布式漏洞扫描系统设计与实现 【编程语言】2015年05月29日MATLAB——第一天循环,函数 【数据库】2015年04月03日【剑指offer】逆序打印链表 【编程语言】2015年04月24日UIKit-UIView动画扩展块(UIViewAnimationWithBlocks) 【编程语言】2015年04月24日封装了一个js图片轮换效果的函数2014年01月29日codeforces475DCGCDSSQST表+二分 【综合】2014年12月22日PHP中extract()函数的妙用分析2014年01月29日数据库设计一《基本概念》【编程语言】2015年05月05日SICP1.7-1.8PLTScheme实现 【移动开发】2014年12月29日RabbitMQ官网教程---简介 【移动开发】2015年01月12日基于文档的JavaNoSQL数据库,OrientDB1.1.0发布 ,,2016年07月24日AndroidPopupWindow使用示例【编程语言】2015年01月12日SpringMVC+Spring+Hibernate的小例子 【综合】2014年11月04日JS自动完成AutoComplete(Ajax查询)2014年01月29日PHPWindforumV7.5SP1使用与修复说明2014年01月28日jquerytablesorter.js支持中文表格排序改进2014年01月29日CodeforcesRound#226(Div.2)C数论【编程语言】2014年11月18日java.lang.NoClassDefFoundError异常 【综合】2015年05月19日mysql数据库导入sql文件不成功【架构设计】2014年12月30日机器学习之实战matlab神经网络工具箱 【综合】2015年08月14日Audiophobia【移动开发】2014年12月17日【BZOJ2005】【Noi2010】能量采集gcd 【综合】2015年03月26日Notepad++常用快捷键【编程语言】2015年05月12日GridView导出Excel实现原理与代码2014年01月29日翻译经典之《CiscoLanSwitching》第六章理解生成树(六):STP五个状态 【综合】2015年02月15日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)