当前位置: 首页 > news >正文

用自己的电脑做视频网站wordpress 仿百度模板

用自己的电脑做视频网站,wordpress 仿百度模板,wordpress果酱主题,视频点播网站开发教程Java的动态代理常用来包装原始方法调用#xff0c;用于增强或改写现有方法的逻辑#xff0c;它在Java技术领域被广为使用#xff0c;在阿里的Sofa RPC框架序列化中你能看到它的身影#xff0c;Hibernate的实体类功能增强也是以动态代理的方式解决的#xff0c;还有Spring吹…Java的动态代理常用来包装原始方法调用用于增强或改写现有方法的逻辑它在Java技术领域被广为使用在阿里的Sofa RPC框架序列化中你能看到它的身影Hibernate的实体类功能增强也是以动态代理的方式解决的还有Spring吹牛逼的AOP功能也是它搞定的。接下来我们看一个例子该例子用于对原有的方法调用前后各打印一句话这也算是对原有类方法的一种增强。 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;interface IHello {void say(String s);}// 待加强的目标类 class RealHello implements IHello {Overridepublic void say(String s) {System.out.println(hello s);}}// 增强器 class HelloDelegate implements InvocationHandler {private IHello target; // 原始对象public HelloProxy(IHello target) {this.target target;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(before print);method.invoke(target, args); // 调用原始对象的方法System.out.println(after print);return null;}}public class DynamicProxy {public static void main(String[] args) {IHello hello enhanceHello(new RealHello()); # 增强原始方法hello.say(world);}public static IHello enhanceHello(IHello target) {return (IHello) Proxy.newProxyInstance(DynamicProxy.class.getClassLoader(), new Class?[] { IHello.class },new HelloDelegate(target));}} 复制代码输出 before print hello world after print 复制代码 为了便于理解我们用图来表示上面的对象的关系。我们调用Proxy.newProxyInstance产生了一个匿名类实例该实例同样实现了IHello接口它的作用就是用来替代原生的RealHello实例。这个匿名实例持有HelloDelegate实例的引用当你对这个匿名实例进行方法调用时它会将调用逻辑委托给HelloDelegate实例的invoke方法。HelloDelegate实例内部又持有原生RealHello对象的引用所以用户就可以在invoke方法里实现任意附加逻辑以及对原生RealHello对象的调用。 上面是jdk自带的动态代理技术它的缺点是必须定义接口才能实现目标对象的方法增强甚至想使用abstract class来替代也不行。所以开源市场上冒出了好几个动态代理的库用于替代原生的jdk动态代理技术它们不仅仅功能更强大而且内部使用了字节码增强实现在性能上还也要比原生jdk高出很多。 javaassist javaassist是使用最广泛的动态代理开源库。下面我们使用javaassist实现一个无需定义接口就能增强原始方法的例子。 import java.lang.reflect.Method;import javassist.util.proxy.MethodHandler; import javassist.util.proxy.ProxyFactory;class RealHello {public void say(String s) {System.out.println(hello s);}}class HelloDelegateT implements MethodHandler {private T target;public HelloDelegate(T target) {this.target target;}Overridepublic Object invoke(Object self, Method method, Method proceed, Object[] args) throws Throwable {System.out.println(before print);method.invoke(target, args);System.out.println(after print);return null;}}public class DynamicProxy {public static void main(String[] args) {RealHello hello enhanceHello(new RealHello());hello.say(world);}SuppressWarnings(unchecked)public static T T enhanceHello(T target) {ProxyFactory proxy new ProxyFactory();proxy.setSuperclass(RealHello.class);try {HelloDelegateT delegate new HelloDelegateT(target);// create方法传递了两个空数组// 分别代表构造器的参数类型数组和构造器的参数实例数组return (T) proxy.create(new Class?[0], new Object[0], delegate);} catch (Exception e) {e.printStackTrace();}return null;}} 复制代码输出 before print hello world after print 复制代码看起来和原生jdk提供的动态代理区别并不大达到的效果是一样的。只不过这里要简单了很多省去了接口类的定义。javaassist的ProxyFactory还提供了方法过滤器它可以选择性地对特定方法进行增强。 Python Python是动态语言对于上面复杂的动态代理技术它一笑而过。 下面我们来看看Python如果实现所谓的动态代理功能 class Proxy(object):def __init__(self, target):self.target targetdef __getattribute__(self, name):target object.__getattribute__(self, target)attr object.__getattribute__(target, name)def newAttr(*args, **kwargs): # 包装print before printres attr(*args, **kwargs)print after printreturn resreturn newAttrclass RealHello(object):def prints(self, s):print hello, sif __name__ __main__:t RealHello()p Proxy(t)p.prints(world) 复制代码输出 before print hello world after print 复制代码我们使用了神奇的__getattribute__方法。在Python里面类的属性(方法)都是一个对象我们先拿到这个类方法对象attr然后对这个类方法对象进行包装再返回包装后的新方法对象newAttr。 注意在获取target对象时不能直接使用self.target因为self.target会再次调用__getattribute__方法这样就会导致死循环致堆栈过深曝出异常。取而代之应该使用object.__getattribute__方法来获取对象的属性值。 以上就是Python实现动态代理的方案读者们你们是否觉得Python更加简单呢欢迎大家一起来评论区吵架。 精彩文章关注公众号「码洞」
http://www.pierceye.com/news/202929/

相关文章:

  • 创客网站建设新余公司做网站
  • 买个网站域名多少钱网站建设 内容缺乏
  • 清河做网站哪里好建设一个网站的文案需要
  • 农机网站模版建网站用什么工作站
  • 网站可以做无形资产游戏代理0加盟费
  • 高端网站建设哪家公司好城乡建设部网站甘红刚
  • 湖北省建设部网站网站排名seo教程
  • 郑州 高端网站建设网络结构有哪几种
  • 电脑做apk的网站h5工商网站如何做实名
  • 循化网站建设公司c语言开发工具
  • wordpress网站做app关于网站的ppt怎么做
  • 怎么建设商品网站项目计划书范文
  • 大足建网站的网页微信版官方下载
  • 企业网站免费建设做网站设计需求
  • 做电影网站用什么虚拟主机建设网站模块需要哪些内容
  • 基于asp.net网站开发优化企业网站
  • 做网站有了空间在备案吗网站建设实务课本
  • 个人站长和企业网站wordpress主键外键
  • 关于对网站建设情况的通报东南亚跨境电商有哪些平台
  • 如需郑州网站建设长沙微网站制作
  • html格式网站网站搜索排名优化软件
  • 定制 网站天津做网站要多少钱
  • 免费做问卷的网站网站建设 好发信息网
  • 网站职能建设论文网页跳转链接怎么制作
  • 专题网站开发工具有哪些wordpress迁移500
  • 酒泉网站建设费用磁力搜索引擎不死鸟
  • 有网站是做水果原产地代发的吗临沂哪家做网站最好
  • 网站建设的背景wordpress htaccess
  • 如何在百度上注册自己的网站郓城做网站哪家好
  • 企业电子商务网站建设总结安徽建设工程信息网查询平台公司