首先简单说一下云平台的业务功能:云平台上提供了多种多样的服务,这些服务可能来源于不同的供应商。也就是说对于某一种服务来说,可能会有多个供应商提供相同的服务;而对于某一个供应商来说,它可能提供多种服务。
之前的云平台中有一个插件机制,使用插件机制解决了供应商与系统的耦合度问题。系统抽象了服务层,服务层在合适的时机加载插件以调用供应商的服务。
加载相关的代码大概类似这样:
1...
2ClassLoader localClassLoader = Thread.currentThread().getContextClassLoader();
3for (String str : providerClassNames) {
4 try {
5 Class<?> localClass = localClassLoader.loadClass(str);
6 XXXServiceProvider localProvider = (XXXServiceProvider) localClass.newInstance();
7 localProvider.initial();// 初始化插件
8 } catch (Exception e) {
9 ...
10 }
11}
12...
providerClassNames是一个数组,其中并所有插件的主类名字。通过获取到的ClassLoader,对插件主类进行加载,从而获得插件对象。