java spi

java spi实现

当服务提供者(provider),提供一个接口多种实现时,

  1. 在jar包的META-INF/services/目录下创建该接口的全限名文件,文件里面的内容就是该服务接口的具体实现类的名称,而当外部加载这个 模块时,就能通过该jar包META-INF/services/里的配置文件得到具体实现类名,并加载实例化,完成模块的装配
spi工程目录
//Command.java
package com.soa.other.spi;

public interface Command {
    void execute();
}
//ShutdownCommand 
package com.soa.other.spi;

public class ShutdownCommand implements Command{
    @Override
    public void execute() {
        System.out.println("Shutdown");
    }
}
// StartCommand 
package com.soa.other.spi;

public class StartCommand implements Command {
    @Override
    public void execute() {
        System.out.println("Start");
    }
}

//Main调用类

package com.soa.other.spi;

import java.util.ServiceLoader;

public class Main {
    public static void main(String[] args) {
        ServiceLoader<Command> serviceLoader = ServiceLoader.load(Command.class);
        for (Command command : serviceLoader) {
            command.execute();
        }
    }
}

弊端(相比与dubbo的spi):
1.一次性加载
2.全部加载,没有用到也要会加载
3.没有AOP/IOC的支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SPI简介 如何使用SPI 应用举例1. 组织方制定接口2. 实现方根据SPI规范实现接口3. 组织方加载实现类 ...
    齐晋阅读 922评论 0 5
  • 一、Java SPI是什么 SPI的英文全称为Service Provider Interface,字面意思为服务...
    GeekerLou阅读 4,231评论 0 39
  • 最近一直忙于测试人身险老系统对接新系统的项目,这期间无论出单操作还是批改操作从单落地新系统出现了重重阻碍。新系统极...
    软测韩豆豆阅读 559评论 0 0
  • 这几天,武汉六中的语文老师杨幼萍特别“火”。她在开学誓师大会上的发言,被大家称为“最燃”演讲,不少学生、家长都希望...
    人生炫舞阅读 256评论 0 0