private MockService getMockService()

in dubbo-mock-extensions/dubbo-mock-admin/src/main/java/org/apache/dubbo/mock/filter/AdminMockFilter.java [92:126]


    private MockService getMockService() {
        if (Objects.nonNull(mockService)) {
            return mockService;
        }
        synchronized (this) {
            if (Objects.nonNull(mockService)) {
                return mockService;
            }
            // init the config, the registry is from user's config.
            ReferenceConfig<MockService> mockServiceConfig = new ReferenceConfig<>();
            mockServiceConfig.setCheck(false);
            mockServiceConfig.setInterface(MockService.class);
            mockServiceConfig.setRegistries(DubboBootstrap.getInstance().getConfigManager().getDefaultRegistries());
            List<URL> urls = ConfigValidationUtils.loadRegistries(mockServiceConfig, false);
            if (CollectionUtils.isEmpty(urls)) {
                return null;
            }
            // build the URL parameters
            URL url = urls.get(0);
            Map<String, String> map = new HashMap<>();
            ReferenceConfigBase.appendRuntimeParameters(map);
            map.put(INTERFACE_KEY, MockService.class.getName());
            map.put(SIDE_KEY, CONSUMER_SIDE);
            AbstractConfig.appendParameters(map, mockServiceConfig.getApplication());
            AbstractConfig.appendParameters(map, mockServiceConfig.getModule());
            AbstractConfig.appendParameters(map, mockServiceConfig);
            url = url.putAttribute(REFER_KEY, map);
            // create the proxy MockService
            Invoker<MockService> invoker = protocol.refer(MockService.class, url);
            mockService = proxyFactory.getProxy(invoker);
            ScopeModelUtil.getApplicationModel(mockServiceConfig.getScopeModel()).getBeanFactory().getBean(ShutdownHookCallbacks.class)
                .addCallback(invoker::destroy);
            return mockService;
        }
    }