浅谈Java的SPI技术

网友投稿 351 2022-11-30


浅谈Java的SPI技术

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

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

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

上代码:

package com.gys.test;

public interface IAnimal {

void eat();

}

package com.gys.test.impl;

import com.gys.test.IAnimal;

public class Bird implements IAnimal {

@Override

phttp://ublic void eat() {

System.out.println("小鸟吃虫子");

}

}

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("小狗吃骨头");

}

}

package com.gysbQGBH.test;

import java.util.ServiceLoader;

public class MainbQGBHTest {

public static void main(String[] args) {

ServiceLoader animals=ServiceLoader.load(IAnimal.class);

for (IAnimal animal:animals){

animal.eat();

}

}

}

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

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

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

SPI使用场景:

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

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java中如何区分==和equals
下一篇:浅析JAVA 循环结构
相关文章

 发表评论

暂时没有评论,来抢沙发吧~