回答
鉴于一个类由类名和加载该类的类加载器唯一标识的事实,parent
和child1
必须由bundle_1
的类加载器加载。 child2
将由bundle_2
的类加载器加载。
在OSGi中,每个bundle都有一个ClassLoader。加载类时,ClassLoader将首先查看该包的Import-Package语句。如果类来自导入的包,则将加载委托给提供该包的包的ClassLoader。如果没有这些匹配,那么捆绑将尝试从它自己的类中加载类。 (这是简化了一点,但应该足够你的情况)。
所以父类和child1类将由bundle_1的ClassLoader加载,并且child2将由bundle_2的ClassLoader加载。
还有一件事要记住。 Java中的每个类都存储在“class”.getClassLoader()中创建此类的ClassLoader。所以这可以让你轻松检查真正发生的事情。只需实例化child1和child2并打印ClassLoaders。
与此相关的另一件事是,如果您在类A的代码中使用新的“Classname”(),那么这将触发加载类A的ClassLoader(当然可以委派它)。
父类是否会加载两次? – gstackoverflow 2014-09-24 19:05:08
否。当类加载委派时,bundle1的类加载器将知道它已经加载了父类。 – 2014-09-25 16:43:52
- 1. C# - 加载继承类
- 2. 如何使用继承类的实例加载继承对象?
- 3. objc_getClass:加载swift类继承NSObject
- 4. 方法重载和类继承
- 5. JMSSerializer和继承类
- 6. 类继承和DI
- 7. OSGi和JNI的类加载问题
- 8. OSGi Felix和BndTools - 按名称加载类
- 9. 继承和延迟加载NHibernate的
- 10. C++继承和动态库加载
- 11. 自动加载路径和STI继承
- 12. OSGi类加载器问题
- 13. 继承和类内的类
- 14. 导入类和继承类
- 15. 继承Python类继承docstrings
- 16. 继承,隐藏和重载
- 17. 继承和方法重载
- 18. 重载函数和继承
- 19. JPA加入继承类
- 20. osgi继承的实现导出
- 21. 其他继承类中的继承类
- 22. JAVA:泛型类继承和泛型类型继承
- 23. C++模板类和继承
- 24. 类的继承和铸造
- 25. C++泛型类和继承
- 26. C#嵌套类和继承
- 27. C++循环继承和类
- 28. 继承和类成员
- 29. Java内部类和继承
- 30. C++继承和类成员
但child2的超级构造函数将在bundle_1上调用? – gstackoverflow 2014-09-23 17:11:52
您的问题未提供足够的信息。这些类包含哪些包?捆绑包实际导出和导入了哪些包?另外,调用意味着你正在讨论线程。线程不属于捆绑。 – 2014-09-23 23:10:29
@gstackoverflow:构造函数调用实际上与类加载的关系有限。你需要澄清你的意思“child2的超级构造函数将在bundle_1上调用”还是更好:你首先提出问题的理由。 – 2014-09-24 06:58:55