奇怪的OSGi-Spring类加载的问题

       调试程序时发现一个奇怪的类加载问题,描述如下:
       假设有一个Bundle,其中有类 a.Ab.B
java 代码
 
  1. package a;  
  2.   
  3. public class A{  
  4.     private B ab;  
  5.     public void setB(B b){  
  6.         this.ab = b;  
  7.     }  
  8. }  

以及他们的Spring配置:
xml 代码
 
  1. <bean id="bBean" class="b.B" />  
  2.   
  3. <bean id="aBean"  class="a.A">  
  4.   <property name="b" ref="bBean"/>  
  5. </bean>  

META-INF.MF中 仅导出包a

        现在启动该Bundle,A和B的ClassLoader都是 CL1,这是毫无疑问的。但当使用Eclipse的OSGi控制台命令 update 时,问题出现了,会抛出异常“Failed to convert property value of type [b.B] to required type [ b.B ] for property 'b' ”,这个异常很奇怪,似乎有点自相矛盾。其实不然,update后,由于A所在包属于导出包,可能被其他Bundle共享,所以其ClassLoader仍为CL1,因此A中定义的变量ab的类型B是由CL1加载的,而此时的bBean在初始化时,其ClassLoader却是一个新的实例 CL2。因此,虽然bBean和ab的类型都是b.B,由于两者的ClassLoader不同,所以就出现了上面的错误信息。
       这里的关键就是CL2的产生,为什么在update时要新生成一个ClassLoader实例?目前尚不清楚这个Bug属于Eclipse的OSGi控制台的还是OSGi-Spring项目本身,甚至是OSGi规范。请高人帮忙指点迷津。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值