java spi机制

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目录,再创建对应接口的文件(文件名:接口文件包名+接口文件名称),如图
java spi机制_第1张图片
文件内容如下:实现类文件的包名+实现类文件名称

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

你可能感兴趣的:(java)