动态代理玩不明白?别紧张,你只是缺少这个demo( 四 )
> intf : interfaces) {int flags = intf.getModifiers();if (!Modifier.isPublic(flags)) {accessFlags = Modifier.FINAL;String name = intf.getName();int n = name.lastIndexOf('.');String pkg = ((n == -1) ? "" : name.substring(0, n + 1));if (proxyPkg == null) {proxyPkg = pkg;} else if (!pkg.equals(proxyPkg)) {throw new IllegalArgumentException("non-public interfaces from different packages");}}}?if (proxyPkg == null) {// if no non-public proxy interfaces, use com.sun.proxy packageproxyPkg = ReflectUtil.PROXY_PACKAGE + ".";}?/** Choose a name for the proxy class to generate.*/long num = nextUniqueNumber.getAndIncrement();String proxyName = proxyPkg + proxyClassNamePrefix + num;?/** Generate the specified proxy class.*/byte[] proxyClassFile = ProxyGenerator.generateProxyClass(proxyName, interfaces, accessFlags);try {return defineClass0(loader, proxyName,proxyClassFile, 0, proxyClassFile.length);} catch (ClassFormatError e) {/** A ClassFormatError here means that (barring bugs in the* proxy class generation code) there was some other* invalid aspect of the arguments supplied to the proxy* class creation (such as virtual machine limitations* exceeded).*/throw new IllegalArgumentException(e.toString());}}?该方法前边包括一些校验、计算出访问标志和包名、代理类定名, 然后在73行创建代理类的字节码文件 , 并defineClass0将字节码文件加载到虚拟机和返回代理类的Class实例 。
如上就是第一次创建代理类的大致流程 。
- 设计模式6之代理模式
- 对微前端的11个错误认识
- 刷爆全网的动态条形图,只需5行Python代码就能实现
- 汕头世爵影音获挪威音乐之旅品牌中国(包括香港,澳门)总代理
- 从零并发框架(三)异步转同步注解+字节码增强代理实现
- HashiCorp开源Boundary:安全访问动态主机服务
- Opera GX游戏浏览器现已支持Razer Chroma RGB动态灯效
- 一位二十年老烧的经验之谈(二)
- 全息行业动态|科技让你我不再有距离
- 使用nginx反向代理github