本篇内容介绍了“web中动态代理模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。代理模式的分类:代理模式分为静态代理和动态代理以简单的事务处理为例静态代理很简单,但是有一个缺点,如果要对很多类、方法进行代理只能一个一个写多个代理类,无法做到代码重用的目的以JDK动态代理实现为例在这里有两个疑问,我们在后面慢慢解开它们的面纱1.如何生成代理类?2.如何执行代理方法?我们先看Proxy.newProxyInstance方法原码这个方法主要就做三件事1.获取或生成代理类2.得到参数类型是InvocationHandler.class构造函数3.生成代理实例我们现在来看看它是如何生成代理类的。看getProxyClass0源码这个方法主要就是看缓存里是否存在代理工厂类,如果存在直接调用get()返回,这里缓存用的是WeakCache,新生代回收时就会被回收,不会占用内存如果缓存中没有就通过new Factory生成一个代理工厂。这里有一些线程安全方面的处理。这里返回的是Supperlier.get(),现在看这个方法中做了些什么事情这个方法比较简单主要是交给valueFactory.apply生成返回,valueFactory是ProxyClassFactory类我们再看看这个方法里在做什么主要是一些规范定义,然后根据ProxyGenerator.generateProxyClass生成字节码再这个方法里做了些什么可以看出主要是分多步将被代理类的方法属性等写到字节流中生成的代理类就如下先看纯CGLIB是如何使用具体如何生成代理类的源码就不展开了,大体思路和JDK一致,最后生成代理类的方式有所不同。先看生成的代理类可以看出和JDK不同的是JDK是implements 原接口,CGLIB是extends原类,而且会生成两个对应的方法,供不同的调用。CGLIB与JDK动态代理的区别 1、CGLIB代理类不需要实现接口,但是也不能是final型 2、CGLIB回调方法不再通过method.invoke反射来处理,采用效率更高的FastClass机制 FastClass机制就是对一个类的方法建立索引,通过索引来直接调用相应的方法例如:Spring Aop默认使用JDK动态代理,除非指定使用CGLIB动态代理,但对接口类只能使用JDK动态代理 具体代码在DefaultAopProxyFactory以JdkDynamicAopProxy为例我们来看spring是如何对方法进行有选择性的增强的1、生成代理类可以看出增强的方法不是我们自己定义的逻辑,而是JdkDynamicAopProxy 那么JdkDynamicAopProxy 必然有一个invoke方法,再看这个方法怎么处理“web中动态代理模式是什么 香港云主机”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量的实用文章!
这篇文章主要讲解了“maven工程的pom文件有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“maven工程的pom文件有什么作用”吧!POM文件结构感谢各位的阅读,以上就是“maven工程的pom文件…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。