Gradle源码八续
来源:互联网 发布:java调用内部类的方法 编辑:程序博客网 时间:2024/06/07 07:25
补充上次的runBuildInProcessbuilder() ->new 了一个ServiceRegistryBuilderbuild()->new 一个前文多次提到的DefaultServiceRegistry, 返回,同时把传入的GlobalScopeServices类attach了上去找configure方法的时候,会找到例如void configure(ServiceRegistration registration, ClassLoaderRegistry classLoaderRegistry)ServiceRegistryBuild.java public ServiceRegistry build() { DefaultServiceRegistry registry = new DefaultServiceRegistry(displayName, parents); for (Object provider : providers) { registry.addProvider(provider); } return registry; } 这个provider就是GlobalScopeServicesDefaultServiceRegistry.java private void findProviderMethods(Object target) { Set<String> methods = new HashSet<String>(); for (Class<?> type = target.getClass(); type != Object.class; type = type.getSuperclass()) { findDecoratorMethods(target, type, methods, ownServices); findFactoryMethods(target, type, methods, ownServices); } findConfigureMethod(target); } //findConfigureMethod(target); 这个target也是GlobalScopeServices 在private void findConfigureMethod(Object target)中 invoke(method, target, params); //method就是void org.gradle.internal.service.scopes.GlobalScopeServices.configure(org.gradle.internal.service.ServiceRegistration,org.gradle.initialization.ClassLoaderRegistry) //target => org.gradle.internal.service.scopes.GlobalScopeServices@1c9eaf8 //params[0]=>org.gradle.internal.service.DefaultServiceRegistry$1,也就是ServiceRegistration, 它是一个接口定义,在 //DefaultServiceRegistry.java中重新定义 private ServiceRegistration newRegistration() { return new ServiceRegistration(){ public <T> void add(Class<T> serviceType, T serviceInstance) { DefaultServiceRegistry.this.add(serviceType, serviceInstance); } public void add(Class<?> serviceType) { ownServices.add(new ConstructorService(serviceType)); } public void addProvider(Object provider) { DefaultServiceRegistry.this.addProvider(provider); } }; } 而在GlobalScopeService.java中 (从上面的invoke调入) void configure(ServiceRegistration registration, ClassLoaderRegistry classLoaderRegistry) { final List<PluginServiceRegistry> pluginServiceFactories = new ServiceLocator(classLoaderRegistry.getRuntimeClassLoader(), classLoaderRegistry.getPluginsClassLoader()).getAll(PluginServiceRegistry.class); for (PluginServiceRegistry pluginServiceRegistry : pluginServiceFactories) { registration.add(PluginServiceRegistry.class, pluginServiceRegistry); pluginServiceRegistry.registerGlobalServices(registration); } } 它会走进override的registration.add , 它会把item加到DefaultServiceRegistry.ownServices列表中 这也是ownService列表里面items的来源之一. 堆栈如图:
0 0
- Gradle源码八续
- Gradle源码入门八
- 插件化系列开发之八--replugin源码解析之replugin-plugin-gradle(插件的gradle插件)
- Gradle源码一
- Gradle源码入门三
- Gradle源码入门四
- Gradle源码入门五
- Lucene 源码剖析 八
- 八皇后问题源码
- 八皇后源码
- TreeMap源码分析八
- TFS源码解析八
- rnnlm源码分析(八)
- STL源码阅读(八)
- 源码(八)
- Android Studio 使用教程(八)之gradle
- gradle源码入门学习六
- Gradle对Spring源码编译
- 【代码篇】JBPM4.4结合业务实现简单工作流
- javascript技术难点(三)之this、new、apply和call详解
- CentOS6.4+vsftpd搭建ftp服务器
- 线程一些相关函数
- 阶乘的最高位
- Gradle源码八续
- zlib, minizip加密,多文件压缩
- [tips] 在MFC中快速预览对话框布局的快捷键
- JavaScript开发者常忽略或误用的七个基础知识点
- ANT property三种使用方式
- 线程1:一种支持内存共享的简捷工具
- f((n)=1+1/2+1/3+.....+1/n
- hdu 1728 逃离迷宫(bfs)
- 线程2:互斥对象