最近在研究系统设计方面的东西,发现有很多通用的解决方案,包括spring配置扩展以及serviceLoader的应用,这里简单记录下serviceLoader的简单应用,网上例子很多,大同小异,本人觉得最主要的是能懂得思想,运用到系统设计之中
基本代码结构是这样的
首先定义服务接口
package com.mandy.ServiceLocaterTest1; public interface IMyService {
public void showService();
}
再来定义它的实现类
package com.mandy.ServiceLocaterTest1; public class MyService1 implements IMyService {
public void showService() {
System.out.println("MyService1 MyService1 MyService1");
}
}
package com.mandy.ServiceLocaterTest1; public class MyService2 implements IMyService {
public void showService() {
System.out.println("MyService2 MyService2 MyService2");
}
}
配置META-INF/services/com.mandy.IServiceLocaterTest1.IMyService
com.mandy.ServiceLocaterTest1.MyService1
com.mandy.ServiceLocaterTest1.MyService2
测试下:
package com.mandy.ServiceLocaterTest1; import java.util.ServiceLoader; public class TestMain {
public static void main(String[] args) {
ServiceLoader<IMyService> serviceLoader = ServiceLoader.load(IMyService.class);
for (IMyService service : serviceLoader) {
service.showService();
}
}
}
结果:
MyService1 MyService1 MyService1
MyService2 MyService2 MyService2
可以通过ServiceLoader和配置加载并遍历服务实例