zoukankan      html  css  js  c++  java
  • 简述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
        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.

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

    SPI使用场景:

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

             

  • 相关阅读:
    freebsd ports update url
    Cisco交换机里IP和MAC地址互查找出对应端口
    实现不同vlan间的相互通信方法一:单臂路由
    文件共享③Samba实例
    RHEL6基础四十九之RHEL文件(夹)权限进阶篇
    windows下查找指定端口被哪个程序占用
    DNSmasq – 配置DNS和DHCP
    dnsmasq多vlan配置
    dnsmasq.conf 配置
    windows2003 DHCP中批处理绑定IP与MAC
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/12765353.html
Copyright © 2011-2022 走看看