跨模块服务

如果模块希望提供接口供其他模块调用,需要将接口定义在两个模块共同依赖的第三个模块中,以便双方都能够访问到该接口。然后提供服务的一方需要在自己的模块中提供服务的实现,并通过ServiceFactory暴露出来:

public class PortalServiceFactory implements ServiceFactory {

    @Override
    public <T> T create(Class<T> aClass) {
        if (aClass.isAssignableFrom(PortalDynamicServiceImpl.class)) {
            return (T) new PortalDynamicServiceImpl();
        }
        return null;
    }
}

ServiceFactory包含一个create方法,接收请求的服务接口类型然后返回对应的实现。之后您需要将它们定义在模块的入口类中:

public class ModuleDynamic implements Module {
    ...
    @Override
    public List<Class<?>> supportedServices() {
        ArrayList<Class<?>> list = new ArrayList<>();
        list.add(IModulePortalDynamicService.class);
        return list;
    }

    @Override
    public ServiceFactory serviceFactory() {
        return new PortalServiceFactory();
    }
    ...
}

supportedServices 返回了当前模块支持的服务接口列表,以供其他模块查询;ServiceFactory则暴露了前面的服务实现工厂。当模块加载后,模块的服务将能够被其他模块访问。调用方先通过 Portal 获取到服务的实例:

IModulePortalDynamicService service = Portal.getService(IModulePortalDynamicService.class);

然后通过实例调用接口方法即可。

Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""