AOP 的利器:ASM 3.0 介绍

ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。

与 BCEL 和 SERL 不同,ASM 提供了更为现代的编程模型。对于 ASM 来说,Java class 被描述为一棵树;使用 “Visitor” 模式遍历整个二进制结构;事件驱动的处理方式使得用户只需要关注于对其编程有意义的部分,而不必了解 Java 类文件格式的所有细节:ASM 框架提供了默认的 “response taker” 处理这一切。

Read More

深入理解类文件结构

点击数:95写在前面 我们都知道 JVM 并不能直接运行 Java 源文件,而是开发者通过 JDK 自带的工具命令 javac将 Java 源文件编译成 class 字节码文件,也就是二进制文件,然后供JVM加载并使用。 为了深入学习这一块的内容,先创建类 User: User.java package com.openmind; /** * jishuzhan * * @author zhoujunwen * @date 2019-11-17 * @time 20:28 * @desc */ …

Read More

Nginx截断response的body

在前后端分离实践中,借助于nginx的反向代理,既能解决负载问题,也能解决跨域问题,是一个完美的实现方案。最近解决写了一个多级菜单列表的接口,数据大小有200k。通过ip访问,返回数据是完整的,但是通过代理域名访问,返回只有60-80k之间的数据。

查询Nginx的error.log日志,发现下面的错误:

2017/04/26 18:27:46 [crit] 19851#0: *867217 open() \”/var/lib/nginx/proxy/6/68/0000001686\” failed (13: Permission denied) while reading upstream, client: 10.71.253.194, server: admin-develop.xxx.cc, request: \”GET /v2/menu/list HTTP/1.1\”, upstream: \”http://127.0.1.1:40212/router/menu/list\”, host: \”admin-develop.xxx.cc\”

Read More