﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-路漫漫其修远兮，吾将上下而求索-随笔分类-bcel javassist</title><link>http://www.blogjava.net/fhtdy2004/category/41240.html</link><description>经验浅薄，耐心积累；记性不好，记诸文字</description><language>zh-cn</language><lastBuildDate>Mon, 07 Sep 2009 11:28:19 GMT</lastBuildDate><pubDate>Mon, 07 Sep 2009 11:28:19 GMT</pubDate><ttl>60</ttl><item><title>API转换的问题的解决</title><link>http://www.blogjava.net/fhtdy2004/archive/2009/08/16/291377.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sun, 16 Aug 2009 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/fhtdy2004/archive/2009/08/16/291377.html</guid><wfw:comment>http://www.blogjava.net/fhtdy2004/comments/291377.html</wfw:comment><comments>http://www.blogjava.net/fhtdy2004/archive/2009/08/16/291377.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fhtdy2004/comments/commentRss/291377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fhtdy2004/services/trackbacks/291377.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有了前几篇关于BCEL的使用，现在API转换的问题其实很简单了实际API转换要做的比这个例子要复杂些，涉及到包名，类名，方法名称等的变化。把常量池变化搞清楚就够了假如这是APIa中的一个类实际只提供APIa的jar包，不提供源代码package&nbsp;one.api;public&nbsp;class&nbsp;MyAPITest&nbsp;{&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/fhtdy2004/archive/2009/08/16/291377.html'>阅读全文</a><img src ="http://www.blogjava.net/fhtdy2004/aggbug/291377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-16 19:30 <a href="http://www.blogjava.net/fhtdy2004/archive/2009/08/16/291377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 BCEL 设计字节码（三）直接在方法的调用处添加方法</title><link>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291097.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Thu, 13 Aug 2009 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291097.html</guid><wfw:comment>http://www.blogjava.net/fhtdy2004/comments/291097.html</wfw:comment><comments>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291097.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fhtdy2004/comments/commentRss/291097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fhtdy2004/services/trackbacks/291097.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这个最接近之前提出的API转换问题这个需要扫描源代码找到此类的方法调用处，然后在方法调用处的前后添加指令即将代码转换成如下形式：public&nbsp;class&nbsp;StringBuilder{&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;buildString(int&nbsp;length)&nbsp;{...&nbsp;&nbsp;<a href='http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291097.html'>阅读全文</a><img src ="http://www.blogjava.net/fhtdy2004/aggbug/291097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-13 23:10 <a href="http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 BCEL 设计字节码（二）直接在原方法上加指令</title><link>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291095.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Thu, 13 Aug 2009 14:53:00 GMT</pubDate><guid>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291095.html</guid><wfw:comment>http://www.blogjava.net/fhtdy2004/comments/291095.html</wfw:comment><comments>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291095.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fhtdy2004/comments/commentRss/291095.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fhtdy2004/services/trackbacks/291095.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前一个是直接生成了一个一个方法对原方法进行调用，现在直接在原方法上进行修改即将public&nbsp;class&nbsp;StringBuilder{&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;buildString(int&nbsp;length)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291095.html'>阅读全文</a><img src ="http://www.blogjava.net/fhtdy2004/aggbug/291095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-13 22:53 <a href="http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】用 BCEL 设计字节码</title><link>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291025.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Thu, 13 Aug 2009 07:58:00 GMT</pubDate><guid>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291025.html</guid><wfw:comment>http://www.blogjava.net/fhtdy2004/comments/291025.html</wfw:comment><comments>http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291025.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/fhtdy2004/comments/commentRss/291025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fhtdy2004/services/trackbacks/291025.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 查到一篇使用BCEL了,Java 编程的动态性，第 7 部分: 用 BCEL 设计字节码，网址是http://www-128.ibm.com/developerworks/cn/java/j-dyn0414/字节码处理的工具也挺多，什么时候再看看asmimport&nbsp;java.io.FileOutputStream;import&nbsp;org.apache.bcel...&nbsp;&nbsp;<a href='http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291025.html'>阅读全文</a><img src ="http://www.blogjava.net/fhtdy2004/aggbug/291025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-13 15:58 <a href="http://www.blogjava.net/fhtdy2004/archive/2009/08/13/291025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>API转换的问题的提出</title><link>http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290784.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Wed, 12 Aug 2009 04:16:00 GMT</pubDate><guid>http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290784.html</guid><wfw:comment>http://www.blogjava.net/fhtdy2004/comments/290784.html</wfw:comment><comments>http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fhtdy2004/comments/commentRss/290784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fhtdy2004/services/trackbacks/290784.html</trackback:ping><description><![CDATA[<p>假如现有两个API，AIPa，和APIb，两个api定义的类，接口，功能均完全相同，但是有写细微差别，比如说方法的参数类型不同，方法的返回值不同等等。<br />
比如APIa中一个类A的方法为public int add(String a,String b)<br />
比如APIb中的一个类A的方法为 public int&nbsp;add(int a,int b)<br />
<br />
之前有一程序是使用APIa编写的（现在只提供此程序的 class文件，不提供程序的源代码，不允许修改程序的源代码），现在要使这个程序能够在APIb下能够使用？？<br />
<br />
方法一不修改APIb的classes文件，而是修改应用程序的classes文件，将扫描原始应用程序的class文件，将class文件中用到APIa的方法转换成APIb的方法??，这个应该不叫转换，比如在程序中调用a.add("1","2")时，<span style="color: red">在方法调用前将方法栈中的字符串参数转换成数字，使用javassist怎么来做，使用bcel怎么来做？？<br />
</span><br />
方法二不修改应用程序的classes文件，而是修改APIb的classes文件，是将APIb的接口形式转换为APIa的形式，使用javassist重写APIb的方法，对APIb的所有方法进行包装成APIa的方法，然后使用重写的APIb的classes文件来允许程序。这个使用javassist应该比较方便，使用becl?<br />
这个就有点不方便了，如果APIb的类库比较大的话，API间不一致的地方也比较多的话，都需要自己重写，相当于重新包装了这个APIb，需要修改APIb的classes文件，有可能其他程序要用到这个APIb。<br />
<br />
还不太清楚，在仔细想想怎么来做，接下来的工作自己写两套简单的API，然后试验试验。<br />
刚开始想的是使用方法二来做，好像这个不太现实，应该是程序使用到了哪个方法，就对这个方法来进行修改，还是方法一好点。<br />
再好好看看java虚拟机规范。。。<br />
<br />
这个只是一个简单问题的提出，而我实际要转换的程序要比这个复杂，但是基本原理就这了。<br />
tmd，花了一天多把java虚拟机规范看了好几章，我都佩服自己的学习能力，他妈的为什么就找不到实习了？</p>
<img src ="http://www.blogjava.net/fhtdy2004/aggbug/290784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-12 12:16 <a href="http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java的编程动态性</title><link>http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290769.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Wed, 12 Aug 2009 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290769.html</guid><wfw:comment>http://www.blogjava.net/fhtdy2004/comments/290769.html</wfw:comment><comments>http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fhtdy2004/comments/commentRss/290769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fhtdy2004/services/trackbacks/290769.html</trackback:ping><description><![CDATA[<p>第 1 部分，&#8220; <a href="http://www.ibm.com/developerworks/cn/java/j-dyn0429/" cmimpressionsent="1">类和类装入</a>&#8221;（2003 年 4 月） </p>
<p>第 2 部分，&#8220; <a href="http://www.ibm.com/developerworks/cn/java/j-dyn0603/" cmimpressionsent="1">引入反射</a>&#8221; （2003 年 6 月） </p>
<p>第 3 部分，" <a href="http://www.ibm.com/developerworks/cn/java/j-dyn0715/" cmimpressionsent="1">应用反射</a>" （2003 年 7 月） </p>
<p>第 4 部分，&#8220; <a href="http://www.ibm.com/developerworks/cn/java/j-dyn0916/" cmimpressionsent="1">用 Javassist 进行类转换</a>&#8221; （2003 年 9 月） </p>
<p>第 5 部分，&#8220; <a href="http://www.ibm.com/developerworks/cn/java/j-dyn0203/" cmimpressionsent="1">动态转换类</a>&#8221; （2004 年 2 月） </p>
<p>第 6 部分，&#8220; <a href="http://www.ibm.com/developerworks/cn/java/j-dyn0302/" cmimpressionsent="1">用 Javassit 进行面向方面的更改</a>&#8221;（2004 年 3 月） </p>
<p>第 7 部分，&#8220; <a href="http://www.ibm.com/developerworks/cn/java/j-dyn0414/index.html" cmimpressionsent="1">用 BCEL 设计字节码</a>&#8221; （2004 年 4 月） <br />
<br />
<span style="color: #999999">Java 编程的动态性，第 8 部分: </span>用代码生成取代反射<br />
http://www.ibm.com/developerworks/cn/java/j-dyn0610/<br />
<br />
<br />
<br />
</p>
<img src ="http://www.blogjava.net/fhtdy2004/aggbug/290769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-12 10:35 <a href="http://www.blogjava.net/fhtdy2004/archive/2009/08/12/290769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>