javassist一个很奇怪的问题

问题描述

采用javassist来将一个类中的field改变类型。待改变的类代码如下:public class JassistTest {@Autowiredprivate StpService stpService;public void doit(Long userid){PeakSeasonMainResponse res = stpService.getPeakOverView(userid);System.out.println(stpService.getClass().getName());System.out.println("hello" + res);}}进行改变操作的类如下:public class TestMain {public TestMain(){}public static void main(String[] args) throws Exception{ClassPool pool = ClassPool.getDefault();CtClass cc = pool.get("JassistTest");CtField f = cc.getDeclaredField("stpService");cc.removeField(f);cc.addField(CtField.make("private Proxy stpService;", cc));cc.writeFile("D:\DevProgram\eclipse-jee-kepler-R-win32\workspace\stable\fc-deimos\target\test-classes");JassistTest test = new JassistTest();test.doit(7060L);}}class文件生成后,我用反编译工具查看,Javassist已经变为如下:public class JassistTest{ private Proxy stpService; public void doit(Long userid) { PeakSeasonMainResponse res = this.stpService.getPeakOverView(userid); System.out.println(this.stpService.getClass().getName()); System.out.println("hello" + res); }}但当我执行TestMain.java文件中的test.doit()方法时,还是报异常了。Exception in thread "main" java.lang.NoSuchFieldError: stpServiceat JassistTest.doit(JassistTest.java:13)at TestMain.main(TestMain.java:33)实在搞不懂,请教大家

解决方案

感觉跟classloader有关,试试这样,分开两次执行。第一次生成新的class,第二次把在path里直接使用新的class文件

时间: 2024-09-13 02:19:05

javassist一个很奇怪的问题的相关文章

java-新手问一个很奇怪的问题

问题描述 新手问一个很奇怪的问题 class Demo { int num = 1; int add = 2; Demo() { num = 5; add = 6; } void show() { System.out.println("Fu num="+num+" Fu add="+add); } } class DemoA extends Demo { DemoA() { this.num = 3; this.add = 4; } void show() { S

c语言 单片机-keil4开发中遇到的一个很奇怪的问题。

问题描述 keil4开发中遇到的一个很奇怪的问题. void main(){ // uchar test_i; const uchar timp_button=0xfF; //this value is that the button havn't sticked uchar n_delay; //delay unsigned char j=0; unsigned char i; intend_initiation(); //调用时间设定程序 while(1){ if((hour==alarm_

java-大神进来帮看看,一个很奇怪的问题

问题描述 大神进来帮看看,一个很奇怪的问题 代码如下,偶尔会出现数据库未更新的问题,但是看日志里面提交sql的日志已经打印出来,sql语句单独拿出来执行也没问题,我是真搞不明白了,大神求助啊! 解决方案 有可能是因为表字段的关联关系或者表字段的大小限制,是否非空,数值范围的限制 解决方案二: catch后,把exception输出到日志中,不就知道报的什么错了么? 插入失败的可能原因太多了

结构体数组-C++中一个很奇怪的数组

问题描述 C++中一个很奇怪的数组 static const AP_Scheduler::Task scheduler_tasks[] PROGMEM = { { ins_update, 1, 1000 }, { one_hz_print, 50, 1000 }, { five_second_call, 250, 1800 }, }; 注:AP_Scheduler是一个类,Task是这个类的结构体成员,一下是Task的定义: struct Task { task_fn_t function; u

在单片机开发中,我遇到了一个很奇怪的关于外部中断的问题

问题描述 在单片机开发中,我遇到了一个很奇怪的关于外部中断的问题 void button_int0 () interrupt 0 { //当函数正确时,需改正delay(大数目)为delay_stop(大数目); uchar timp; uint i=0; /**** IE=0x80时,程序执行完了,但是没有办法退出中断, 当使用EA=0时,就可以退出中断了.很肯定的是,并没有重复进入中断. *****/ //IE=0x80; EX0=0; EA=0; light =1: timp=P1; ex

代码-一个很奇怪的js不清楚到底是什么意思

问题描述 一个很奇怪的js不清楚到底是什么意思 Q x$=[ 'KKorupo1ikllkwKK', 'KKorupo1ikllkwKK', 'Drzpiq', 'orupoCryl', 'W1a1KmXmXmW', 'W1I1amW1m1Jm', 'AhhhmoitClpjjmuqAhhhmoitClpjjmzkAhhhmoitClpjjmzrTiAhhhmoitClpjjmqklAhhhmoitClpjjmrwtAhhhmoitClpjjmyrAhhhmoitClpjjmlGAhhhmoiG

线程-sql 找错,一个很奇怪的错误

问题描述 sql 找错,一个很奇怪的错误 sql = "UPDATE bs2_dl_road_min SET count=count+{0} WHERE time='{1}' " "AND host_ip='{2}' AND module='{3}' AND method='{4}' AND status='{5}' " "AND size_level='{6}' AND level='{7}' AND submodule_road='{8}'"

leetcode-C++程序里面一个很奇怪的bug!跪求解释!!!

问题描述 C++程序里面一个很奇怪的bug!跪求解释!!! 这是我试图求解leetcode 第六题,这不重要,主要看一下程序里面那个if语句的执行 问题,不用看我针对这道题的逻辑对不对,这不是重点,重点是那个if语句!!! 在代码那个(***)的地方我给了注释!!! #include <iostream> #include <string> #include <cstring> using namespace std; int main() { string s; in

javascript-json解析一个很奇怪的问题,是高手就来看看吧

问题描述 json解析一个很奇怪的问题,是高手就来看看吧 json解析一个很怪异的问题,解析后的数据值与原来文本中的数据不同,高手帮忙看一下吧 var t = '{"ItemId":11955115376350605}'; var data = eval('(' + t + ')'); alert(data.ItemId); //弹出11955115376350604 t = '{"ItemId":11955115376350604}'; data = eval('