插件开发中与spring集成遇到的问题

[b]场景[/b]:
1.我把spring的所有jar包到放到一个插件中比如叫third-spring插件。
2.MyTest插件依赖third-spring插件。application.xml配置文件我放在MyTest插件的classPath里。
第一步基于模块化编程中的可重用性思想,将其作为公共插件。
这个时候如果在MyTest中使用

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("res/applicationContext.xml");
这个时候会报file not found。文件找不到

[b]原因分析:[/b]
我们都知道插件开发一个很重要的一点就是每个插件都有自己的classLoader,这也是模块化编程思想
的一个明显的标志。
造成这个问题,就是因为你拿着别人的classLoader去加载自己的资源。人家看不到你。所以告诉你找不到。表面上你以为现在运行的是你的代码,可当时线程中使用的却不一定是你的classLoader。
[b]解决方案:[/b]ClassPathXmlApplicationContext applicationContext ;
final ClassLoader cl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
} finally {
Thread.currentThread().setContextClassLoader(cl);
}
在加载资源的地方先把线程上下文中的classLoader切换成自己的。最后再替换回来。
在实际应用中可能遇到的比这还复杂。但是决大多数,是因为classLoader问题引起的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值