`
TRAMP_ZZY
  • 浏览: 132564 次
社区版块
存档分类
最新评论

Java SPI机制

    博客分类:
  • Java
阅读更多
1. 概述
SPI为Service Provider Interface的缩写。为扩展框架的开发者使用。在Java的世界,有java.sql.Driver,commons-logging等使用。

2. 约定
  • 在META/services目录中创建以接口权限定名为文件名,以具体实现类的权限定为内容


  • SPI 的实现类需要放在classpath 中
  • API 的实现类需要不带参数的构造函数


3. 代码实现
public interface Operation {
    int operation(int numberA, int numberB);
}


public class AddOperation implements Operation {
    @Override
    public int operation(int numberA, int numberB) {
        return numberA + numberB;
    }
}


public class DivisionOperation implements Operation {
    @Override
    public int operation(int numberA, int numberB) {
        if (numberB == 0) {
            throw new IllegalArgumentException("can not be 0.");
        }
        return numberA / numberB;
    }
}


public class SpiMain {
    public static void main(String[] args) {
        Operation operation = new AddOperation();
        System.out.println(operation.operation(6, 3));

        ServiceLoader<Operation> operations = ServiceLoader.load(Operation.class);
        System.out.println(System.getProperty("java.class.path"));

        Iterator<Operation> iterator = operations.iterator();
        while (iterator.hasNext()) {
            operation = iterator.next();
            System.out.println(operation.operation(6, 0));
        }
    }
}

  • 大小: 12.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics