zoukankan      html  css  js  c++  java
  • SPI

    SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。

    Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。

    实现

    1、定义接口

    public interface Animal {
        void say();
    }  

    2、接口实现类

    public class Cat implements Animal {
    
        @Override
        public void say() {
            System.out.println("i'm a cat");
        }
    }
    
    public class Dog implements Animal {
    
        @Override
        public void say() {
            System.out.println("i'm a dog");
        }
    }

    3、在META-INF/services目录下创建和配置对应的文件

    com.vincent.spi.Cat
    com.vincent.spi.Dog
    

    4、测试

    public class SPIMain {
    
        public static void main(String[] args) {
            ServiceLoader<Animal> loaders =
                    ServiceLoader.load(Animal.class);
            for (Animal animal : loaders) {
                animal.say();
            }
    
        }
    } 

     输出结果:

    public class SPIMain {
    
        public static void main(String[] args) {
            ServiceLoader<Animal> loaders =
                    ServiceLoader.load(Animal.class);
            for (Animal animal : loaders) {
                animal.say();
            }
    
        }
    }
    

    5、应用

    应用到java spi的框架还是很多的,如:

    (1)spring的web包

    (2)durid连接池

    (3)数据库驱动加载

    等等。。。

  • 相关阅读:
    git 还原某个文件~~~
    uniqid()
    array_filter 过滤一维中空数组,数组的序列不变
    加密 解密
    gitlab基本维护和使用
    vim 单文件中查找方法
    php数组定义
    $('.goods_tag_ids_all')[0].checked = true;//~~~~~ 单条改变checkbox 属性样式
    由买冰箱想到的
    2014年年终总结
  • 原文地址:https://www.cnblogs.com/vincentren/p/10742995.html
Copyright © 2011-2022 走看看