加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮南站长网 (https://www.0554zz.cn/)- 管理运维、图像技术、智能营销、专属主机、5G!
当前位置: 首页 > 站长资讯 > 动态 > 正文

谷歌出品的神奇图片压缩工具

发布时间:2021-02-15 16:28:38 所属栏目:动态 来源:互联网
导读:apply() 方法中注意有「两个非常重要的方法」: 「ProxyGenerator.generateProxyClass()」:它是生成字节码文件的方法,它返回了一个字节数组,字节码文件本质上就是一个字节数组,所以 proxyClassFile数组就是一个字节码文件 「defineClass0()」:生成字节

apply() 方法中注意有「两个非常重要的方法」:

  • 「ProxyGenerator.generateProxyClass()」:它是生成字节码文件的方法,它返回了一个字节数组,字节码文件本质上就是一个字节数组,所以 proxyClassFile数组就是一个字节码文件
  • 「defineClass0()」:生成字节码文件的 Class 对象,它是一个 native 本地方法,调用操作系统底层的方法创建类对象

而 proxyName 是代理对象的名字,我们可以看到它利用了「proxyClassNamePrefix + 计数器」 拼接成一个新的名字。所以在 DEBUG 时,停留在代理对象变量上,你会发现变量名是$Proxy0。

 

回顾一下我们新增红酒代理功能时,需要2个步骤:

  • 创建新的红酒提供商SellWineFactory和售卖红酒接口SellWine在客户端实例化一个代理对象,然后向该代理对象购买红酒
  • 再回想「开闭原则:面向扩展开放,面向修改关闭」。动态代理正是满足了这一重要原则,在面对功能需求扩展时,只需要关注扩展的部分,不需要修改系统中原有的代码。

如果感兴趣想深究的朋友,把注意力放在Proxy.newProxyInstance()这个方法上,这是整个 JDK 动态代理起飞的一个方法。

讲到这里,JDK 提供的动态代理已经到尾声了,我们来总结一下 JDK 的动态代理:

(1)JDK 动态代理的使用方法

  • 代理工厂需要实现 InvocationHandler接口,调用代理方法时会转向执行invoke()方法
  • 生成代理对象需要使用Proxy对象中的newProxyInstance()方法,返回对象可强转成传入的其中一个接口,然后调用接口方法即可实现代理

(2)JDK 动态代理的特点

目标对象强制需要实现一个接口,否则无法使用 JDK 动态代理

  • 「(以下为扩展内容,如果不想看可跳过)」

Proxy.newProxyInstance() 是生成动态代理对象的关键,我们可来看看它里面到底干了些什么,我把重要的代码提取出来,一些对分析无用的代码就省略掉了。

 

  • days 3650 证书的有效期,自己给自己颁发证书,想有多久有效期,就弄多久,我一下弄了10年的有效期;
  • -inmoonfly.net.csr指定CSR文件
  • -signkeymoonfly.net.key指定服务器的私钥key文件
  • -outmoonfly.net.crt 设置生成好的证书文件名

一条命令,自己给自己压钢印的身份证 moonfly.net.crt 就诞生了!

注:其实严格来讲,这里生成的只是一张RootCA,并不是严格意义上的服务器证书ServerCA,真正的ServerCA是需要利用这张RootCA再给服务器签署办法出来的证书才算;不过我们这里只讲如何实现网页的SSL加密,所以就直接使用RootCA了,也是能正常实现加密功能的!

Nginx启用HTTPS


(编辑:淮南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读