码迷,mamicode.com
首页 > 编程语言 > 详细

Java SPI机制

时间:2018-01-24 19:59:46      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:内容   meta   12px   exec   intro   输出   mon   int   rgs   

Service Provider Interfaces 服务提供发现,动态替换发现的机制

示例:

一个接口:

public interface Calc {
    Logger logger = LoggerFactory.getLogger(Calc.class);
    Object calc(int calcType);
}

两个实现:

计算sin值:

public class SinCalc implements Calc {
    @Override
    public Object calc(int calcType) {
        Object value = Math.sin(calcType);
        logger.info("sin result: {}", value);
        return value;
    }
}
计算开方:
public class SqrtCalc implements Calc {
    @Override
    public Object calc(int calcType) {
        Object value = Math.sqrt(calcType);
        logger.info("sqrt result: {}", value);
        return value;
    }
}

一个服务加载类:

@Component
public class SpiService {
    public Object execCalc(int value){
        ServiceLoader<Calc> loader = ServiceLoader.load(Calc.class);
        Iterator<Calc> iterator = loader.iterator();
        while (iterator.hasNext()) {
            return iterator.next().calc(value);
        }
        return null;
    }
    public static void main(String[] args) {
        new SpiService().execCalc(100);
    }
}

一个配置文件:classpath:META-INF/services/xxx.xxx.Calc

内容:需要加载的功能类

如:xxx.xxx.SqrtCalc

则 运行服务加载类执行,输出计算开方。

示例应用项目:https://github.com/windwant/spring-boot-test

官方文档:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html

Java SPI机制

标签:内容   meta   12px   exec   intro   输出   mon   int   rgs   

原文地址:https://www.cnblogs.com/niejunlei/p/8342760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!