日期:2014-05-20  浏览次数:20624 次

很怪异的问题,请帮忙分析下哦?
我现在在tomcat里发布了2个工程项目,GBSS1,GBSS2
这两个工程里,有个同名的java类,比如是DBPass.java,这个类有一个静态方法叫 doSelect(),

我现在发现一个奇怪的问题,我在操作GBSS2工程的菜单的时候,需要调用DBPss的doSelect()方法,按理说,应该调用GBSS2下的DBPss的doSelect()方法。但是,我通过debug追踪发现,程序却是调用的GBSS1的DBPss类的doSelect()方法。请帮我分析这是为什么哦?难道是跟静态方法有关?最好能从内存角度帮我分析下哦,谢谢

------解决方案--------------------
我是这样理解的,不知道对不对,楼主可以做参考,
1、当tomcat启动过后,可能是用两个线程来管管理两个不同的项目。
2、所以两个项目所对应的class文件应该是“同时”被加载进内存的,也就是他们是被同一个类加载器加载进去的。 因此他们具有相同的命名空间,他们之间也就具备了数据通讯的条件了。
3、static 关键字 对应的是类 的属性,不是某个对象的属性。也就是说,在同一个命名空间里面类的静态属性是全局共享的。
------解决方案--------------------
包名.DBPss.doSelect()试试
------解决方案--------------------
你把另外一个工程close掉,
------解决方案--------------------
你看下你调用这个方法的bean,import的是不是GBSS2,是不是引入的时候写错了?