服务器之家

服务器之家 > 正文

浅谈Java的SPI技术

时间:2020-07-19 11:26     来源/作者:思思博士

人狠话不多,先上截图和代码吧。

浅谈Java的SPI技术

浅谈Java的SPI技术

这是工程目录。看到resources目录下面没有,添加了META-INF和services目录。

添加了一个com.gys.test.IAnimal文件。这个文件名和上面的接口名完全对应。这个目录的文件名是有讲究的,按照SPI规范来的。

上代码:

?
1
2
3
4
5
package com.gys.test;
 
public interface IAnimal {
  void eat();
}
?
1
2
3
4
5
6
7
8
9
10
11
package com.gys.test.impl;
 
import com.gys.test.IAnimal;
 
public class Bird implements IAnimal {
 
  @Override
  public void eat() {
    System.out.println("小鸟吃虫子");
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
package com.gys.test.impl;
 
import com.gys.test.IAnimal;
 
public class Dog implements IAnimal {
  @Override
  public void eat() {
    //System.out.println("小狗吃屎");
    System.out.println("小狗吃骨头");
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
package com.gys.test;
 
import java.util.ServiceLoader;
 
public class MainTest {
  public static void main(String[] args) {
    ServiceLoader<IAnimal> animals=ServiceLoader.load(IAnimal.class);
    for (IAnimal animal:animals){
      animal.eat();
    }
  }
}

浅谈Java的SPI技术

源码一角说明META-INF/service:

浅谈Java的SPI技术

ServiceLoader.load(clsss)就是去ClassPath的MEAT-INF的service下去寻找指定文件;这里的classPath包括外部引入的jar包中的classPath.

如果我们引入了第三方的jar包,如果jar中的META-INF/service有com.gys.test.IAnimal文件,也会被读取,并且实例化里面的类。

SPI使用场景:

自己提供接口让别人提供实现的方式;典型的如JDBC模式。

浅谈Java的SPI技术

浅谈Java的SPI技术

以上就是浅谈Java的SPI技术的详细内容,更多关于JAVA SPI技术的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/guoyansi19900907/p/12765353.html

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
返回顶部