Java SPI技术如何实现详细探讨?

2026-05-24 10:571阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计386个文字,预计阅读时间需要2分钟。

Java SPI技术如何实现详细探讨?

人言少,先上图和代码。这是工程目录。

看到resources目录下没有内容,添加了META-INF和services目录。添加了一个com.gys.test.IAnimal文件。这个文件名和上面的接口名完全对应。

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

这是工程目录。看到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 public 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.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(); } } }

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

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

Java SPI技术如何实现详细探讨?

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

SPI使用场景:

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

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

本文共计386个文字,预计阅读时间需要2分钟。

Java SPI技术如何实现详细探讨?

人言少,先上图和代码。这是工程目录。

看到resources目录下没有内容,添加了META-INF和services目录。添加了一个com.gys.test.IAnimal文件。这个文件名和上面的接口名完全对应。

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

这是工程目录。看到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 public 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.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(); } } }

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

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

Java SPI技术如何实现详细探讨?

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

SPI使用场景:

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

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