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;
}
}