Java-SPI机制

SPI 简介

SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,

 

通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟是JDK的一种标准,目前Dubbo框架就基于SPI机制提供扩展功能。


 

SPI 实现



 

1、首先,创建spi接口类

我们首先创建spi接口类,如创建HelloInterface样例接口

package org.bird.spi;

/**
 * @description java spi(Service Provider Interface)样例
 * @author liangjf
 *
 */
public interface HelloInterface {

	/**
	 * 
	 */
	public void sayHello();
}

2、其次,创建spi实现类

我们分别创建spi接口的ImageHello跟TextHello两个不同实现类

package org.bird.spi.impl;

import org.bird.spi.HelloInterface;

public class ImageHello implements HelloInterface {

	public void sayHello() {
		System.out.println("Image Hello.");
	}

}

 

package org.bird.spi.impl;

import org.bird.spi.HelloInterface;

public class TextHello implements HelloInterface {

	public void sayHello() {
		System.out.println("Text Hello.");
	}

}

3、再次,创建meta目录

我们创建META-INFO/services目录,并创建配置文件,文件名字为 接口/抽象类: 全名 文件内容: 接口/抽象类 实现类就像这样:org.bird.spi.HelloInterface



 

4、最后,创建测试程序

我们最后创建一个spi的测试程序,查看一下是否符合我们的预期结果。

package org.bird.spi;

import java.util.ServiceLoader;

public class SPIMain {

	public static void main(String[] args) {
		  ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);  
		  for(HelloInterface in : loaders) {
			  in.sayHello();
		  }
	}

}

 运行结果如下:

Text Hello.
Image Hello.

 

 

 

 

 

 

猜你喜欢

转载自liangjf85-163-com.iteye.com/blog/2407811