1、定义接口、实现类
HelloService.java
package com.myc.cloud.invoker.service;
/**
* @Classname HelloService
* @Description
* @Date 2020-08-24 08:30
* @Created by myc
*/
public interface HelloService {
void sayHello(String str);
}
实现类:HelloServiceImpl
package com.myc.cloud.invoker.service;
/**
* @Classname HelloServiceImpl
* @Description
* @Date 2020-08-24 08:31
* @Created by myc
*/
public class HelloServiceImpl implements HelloService {
@Override
public void sayHello(String str) {
System.out.println("hello1 "+str);
}
}
实现类:Hello2ServiceImpl
package com.myc.cloud.invoker.service;
/**
* @Classname Hello2ServiceImpl
* @Description
* @Date 2020-08-24 08:31
* @Created by myc
*/
public class Hello2ServiceImpl implements HelloService {
@Override
public void sayHello(String str) {
System.out.println("hello2 "+str);
}
}
2.在classpath目录下创建META-INF/services目录,再创建对应接口的文件(文件名:接口文件包名+接口文件名称),如图
文件内容如下:实现类文件的包名+实现类文件名称
com.myc.cloud.invoker.service.HelloServiceImpl
com.myc.cloud.invoker.service.Hello2ServiceImpl
3、使用
package com.myc.cloud.invoker;
import com.myc.cloud.invoker.service.HelloService;
import java.util.Iterator;
import java.util.ServiceLoader;
/**
* @Classname Test
* @Description
* @Date 2020-08-24 08:33
* @Created by myc
*/
public class Test {
public static void main(String[] args) {
ServiceLoader<HelloService> loader = ServiceLoader.load(HelloService.class);
for(HelloService service: loader){
service.sayHello("sayHello");
}
}
}
结果如下:
hello1 sayHello
hello2 sayHello