asmsupport

ASMSupport局部变量的实现

只谈情不闲聊 提交于 2020-03-02 11:08:34
#局部变量的实现 git@osc地址 在字节码层面,每一个方法都有一个局部变量数组,用来存储当前方法的参数,在方法内声明的变量,如果是非静态方法还要存储当前方法实例的引用this。在我们平时使用java的时候,这个局部变量的大小是在源码编译成class的时候就确定了的,那么如何更高效的利用这个局部变量,并且合理分配每个变量对应在局部变量数组中的位置呢,下面我们就介绍ASMSupport是如何规划局部变量的,先看下面的代码。 代码1 public void method(boolean bool) { int prefix = 1; if(bool) { double d = 2.12; String s = "string"; ... } else { char c = 'a'; long l = 1L; } } 上面的的代码我们用作用域的方式表现出来如下图: 如果按照程序流程执行,很显然这里会有两种执行结果。分别是当bool为真的时候执行if语句块,当bool为false执行else语句块。如下图就是这两种情况的局部变量图 上面前局部变量中,前三个变量是共享的,发生变化的是第后面的变量,对于这两种执行情况,虽然声明的变量类型不同,并且变量字长是不同的,但是由于if和else两个程序块是并行的,所以局部变量中后三个位置是公用的。根据这种情况

ASMSupport教程4.12 生成方法调用操作

我的梦境 提交于 2019-12-13 22:18:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> <p>这一节我们讲如何用ASMSupport生成方法调用的操作,方法调用包括下面四种类型:</p> <ol> <li>调用构造方法 <li>调用静态方法 <li>调用非静态方法 <li>调用当前类的方法 <li>调用父类方法</li></ol> <p>首先我们需要看我们想要生成的类:</p> <p>代码1:</p> <h3> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:8ef33b82-d2bb-4577-8993-178c1b8d44f7" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 796px; height: 519px;" style=" width: 796px; height:

ASMSupport教程1:简单的HelloWorld

落爺英雄遲暮 提交于 2019-12-13 22:17:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 这里不做过多解释,先通过下面的代码生成一个class,再通过反射调用其main方法,感受下ASMSupport的奇妙 1.首先创建一个抽象类 public abstract class AbstractExample { /** * system.out global variable */ public static GlobalVariable systemOut = AClassFactory.getProductClass(System.class).getGlobalVariable("out"); public static Class<?> generate(IClassContext creator){ //_这是Class的输出路径。主要为了调试作用。我们通过asmsupport生成的class将获输出到这个路径 //你可以通过反编译软件看看我们生成的结果 creator.setClassOutPutPath(".//target//"); //这个就是个开关。前面我们把该创建的方法变量都放到了传送带上了。调用startup //启动传送带,将上面的东西一个个处理给我返回一个我们需要的成品(就是class了) Class<?> cls = creator.startup(); /

ASMSupport成功release到OSS。

跟風遠走 提交于 2019-12-13 22:17:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 经过两天的倒腾终于将第一个release版本(0.2版本)的asmsupport加入到 oss.sonatype.org 通过 http://search.maven.org 也能搜索到了。这样一来,只需要将asmsupport的maven坐标: <!-- lang: xml --> <dependency> <groupId>com.googlecode.amssupport</groupId> <artifactId>asmsupport</artifactId> <version>0.2</version> </dependency> 加入到pom文件中,就可以通过maven直接下载使用了。 也有可能会因为我朝网络的问题没法下,这样的话就只能在maven的setting.xml文件中配置代理了。我是通过GoAgent+Google App Engine实现的(可以上Youtube哦,网上很多教程)。 留图留真相: asmsupport地址: https://code.google.com/p/amssupport/ 如果大家有开源项目也可以按照官方文档 https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository

ASMSupport教程4:动态生成类

泪湿孤枕 提交于 2019-12-13 22:13:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 有一段时间没有写blog了,主要原因是前段时间去西安旅游了。好了进入正题。这个篇blog将学习到如何生成一个Class。并且在这个Class中添加局部变量和各种类型的方法。 首先我们看下要生成的class对应的java代码是什么: <!-- lang: java --> public class CreateClassExample { private static String staticGlobalVariable = "I'm a static global variable at class"; public int globalVariable; public CreateClassExample(int intVal) { this.globalVariable = intVal; } private void commonMethod() { System.out.println("staticGlobalVariable : " + staticGlobalVariable); System.out.println("globalVariable : " + this.globalVariable); } public static void main(String[] args) { new

ASMSupport教程4.10 instanceof操作符生成

旧时模样 提交于 2019-12-13 22:07:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> <p>instanceof是判断对象是否是某种类型的,我们可以看下下面的代码:</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:4f2d1c23-092c-4b0f-888f-8ada43241043" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 665px; height: 295px;" style=" width: 665px; height: 295px;overflow: auto;">package generated.operators; import java.io.PrintStream; import java.util.ArrayList; import java.util