Gradle源码八续

补充上次的runBuildInProcess
builder() ->new 了一个ServiceRegistryBuilder
build()->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就是GlobalScopeServices


DefaultServiceRegistry.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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值