本文主要是介绍equinox实现Class Loader机制的代码解读(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在团队开发过程中,不可避免的会出现这样的情况:在bundle内部声明了一个Package的同时,又从外部Import进来相同的Package,这会导致什么情况发生呢?
来做个小实验。
1、创建两个plug-in的项目。
A、创建第一个插件项目
B、同样创建第二个插件项目
2、在每个项目里面除了不同的包,还要都声明一个相同的包名。
在相同的包名里面创建相同名称的类,如下图所示。
3、编写代码
A、第一个SameClass.java代码
public class SameClass {
public void toShow(){
System.out.println( " *** I am inside ! " );
}
}
B、第二个SameClass.java代码
public class SameClass {
public void toShow(){
System.out.println( " *** I am outside! " );
}
}
4、导出导入包
在第一个项目 equinox.evn.test.samepackage (包含"I am outside"内容)的 Manifest.MF文件中加入导出:
Export-Package: org.teamlet.samepackage
在第二个项目 org.teamlet.osgi.test (包含 "I am inside"内容)的 Manifest.MF文件中加入导入:
Import-Package: org.osgi.framework;version="1.3.0",
org.teamlet.samepackage
5、增加调用
在第二个项目 org.teamlet.osgi.test 的Activator 中的 start()方法调用SameClass
SameClass sc = new SameClass();
sc.toShow();
}
6、执行
7、结论
如果bundle引入了一个和内部相同的包,那么使用的将是引入的包,而不是内部的包。
从《equinox实现Class Loader机制的代码解读(1)》中的class查找顺序可以看得很清楚。
这篇关于equinox实现Class Loader机制的代码解读(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!