这个类,把很多很多配置(比如service、application、reference)都可能用到的分析配置的方法,集成到一个AbstractConfig中。
省的每次配置类,都写一遍。
如果不用这种设计模式,则应该会单独写一个工具类,然后把这些分析配置的方法写在工具类里。
但是dubbo,集成很多层,比如service.setApplication、service.setRegistry方法,是AbstractInterfaceConfig类的。service.setInterface、service.setRef是ServiceConfigBase方法,service.export是ServiceConfig方法。
因为setApplication,setRegistry方法是service和reference等都需要使用的。
而setInterface、setRef、export是service使用的。
从这看到这种把公共分层抽离出来,把私有独立出来的设计。
让我想到我之前写的关于web和app的service分离的设计。
ServiceConfig<GreetingsService> service = new ServiceConfig<>();
service.setApplication(new ApplicationConfig("first-dubbo-provider"));
service.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181"));
service.setInterface(GreetingsService.class);
service.setRef(new GreetingsServiceImpl());
service.export();
看一下ServiceConfig继承结构:
image.png