最近在研究系统设计方面的东西,发现有很多通用的解决方案,包括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和配置加载并遍历服务实例