参考dubbo中java的SPI实现

一丶什么事SPI

SPI是查找实现类的一种机制。假设有一个接口,这个接口有N多实现类,Interface i 1= new Interface1();或者Interface i2 = new Interface2();,但是我们使用的时候用if(xx) i = new Interface1(); else i = new Interface2();未免也太繁琐了一点,于是乎就有了SPI。(当然,SPI的作用不局限于消除if else语句)

二丶SPI的使用

1.定义接口和实现类
假如有一个接口

package spi;

/**
 * Created by Administrator on 2017/8/28.
 */
public interface DubboService {
	public void sayHello();
}

实现类1

package spi;
 
/**
 * Created by Administrator on 2017/8/28.
 */
public class RedService implements DubboService {
	public void sayHello() {
		System.out.println("我是RedService服务实现");
	}
}

实现类2

package spi;
 
/**
 * Created by Administrator on 2017/8/28.
 */
public class YellowService implements DubboService {
	public void sayHello() {
		System.out.println("我是YellowService服务实现");
	}
}

2.在META-INF文件夹下创建文件夹services,然后在services下创建文件spi.DubboService(用接口的包名加类名来命名),文件内容

spi.RedService
spi.YellowService

3.写一个main函数

package spi;
import java.util.Iterator;
import java.util.ServiceLoader;

/**
 * Created by Administrator on 2017/8/28.
 */
public class ServiceMain {

	public  static void main(String[] args){
		//jdk自带的ServiceLoader
		ServiceLoader<DubboService> spiLoader = ServiceLoader.load(DubboService.class);
		Iterator<DubboService>  iteratorSpi=spiLoader.iterator();
		while (iteratorSpi.hasNext()){
			DubboService dubboService=iteratorSpi.next();
			dubboService.sayHello();
		}
	}
}

在dubbo中的SPI使用方法有所不同,是利用接口上加注解,然后文件中使用"接口注解字符串"=xx来使用
参考:

https://blog.csdn.net/qiangcai/article/details/77750541

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值