hi,乡亲们好:
菜鸟最近打算学习一下dubbo背后的实现,但又不知道从哪里看起。幸好有位大牛提供了思路。于是就有了第一篇文章,后续还会更新哒!
一、提出疑问:
(1).Dubbo是利用什么来检查项目中是否出现重复的jar包?
(2).Dubbo又是如何来获取项目中的dubbo版本号呢?
- 带着这两个疑问首先找到代码的入口:在dubbo-config子工程中的org.apache.dubbo.config.spring.schema包中的DubboNamespaceHandler类中的静态代码块中,而该类又继承了spring-bean的NamespaceHandlerSupport,至于为什么要集成它,下一篇文章再陈述。
//防痴设计来检查是否有重复的jar包 @link:https://blog.csdn.net/youling_lh/article/details/11829779
static {
Version.checkDuplicate(DubboNamespaceHandler.class);
}
- 在Version类中,主要的两个方法分别是:getVersion(Class<?> cls, String defaultVersion)和checkDuplicate(String path, boolean failOnError)
getVersion(Class<?> cls, String defaultVersion)
checkDuplicate(String path, boolean failOnError)
(3).先说一下checkDuplicate(String path, boolean failOnError)这个方法实现,该方法就是检查是否存在重复的jar包:
-
首先将Version这个类作为唯一的标识,获取项目中的Version这个类的文件路径,然后再新建一个SET集合,将获取到的路径放判断是否还有更多的节点,如果有则获取下一个节点,当节点不为空时;再将url对象放入set集合中;为什么要这么做,因为项目中如果出现了重复的jar包,那么就会出现两个Version类,而实际正确情况只能有一个jar包。当两个jar包在不同的路径时,放入不可重复,不能为空的set集合中,如果set的size大于1则说明有重复的jar包。以下是实现的代码&#