ServiceLoader的实用

 简单的介绍:public final class ServiceLoader<S>extends Object implements Iterator<S>一个简单的服务提供者加载设施用于从配置文件中加载子类或者接口的实现类

主要是从META-INF/service这个目录中的配置文件,读取文件的内容,然后加载给定接口或者基类的相关的实现

具体的工作流程:ServiceLoader会根据给定的类的全名称(包含包名以及类的名称),然后在META-INF/services下面找到和类全名称的名称相同对应的文件,在这个文件中定义了这个类的子类,返回相应的子类的实例

具体的例子:

package com.tan

public interface IDiagramPlugin extends AbstractPlugin
{
    public abstract String getName();
   
    public abstract String getCategory();
}

package com.horstmann.violet.product.diagram.uppaal;

    public class MarkovPlugin implements IDiagramPlugin
    {
        @Override
        public String getName()
        {
            return“”markov“”;
        }

        @Override
        public String getCategory()
        {
            return "static";
        }
    }

    public class UppaalPlugin implements IDiagramPlugin
    {
        @Override
        public String getName()
        {
            return"uppaal";
        }

        @Override
        public String getCategory()
        {
            return "static";
        }
  }
配置文件 在META-INF/services下面文件的名称 com.tan.IDiagramPlugin(.properties)

文件的内容   

            com.tan.MarkovPlugin

            com.tan.UppaalPlugin

测试的代码

public class Test {
   public static void main(String[] args) {
      ServiceLoader<IDiagramPlugin> serviceLoader=ServiceLoader.load(IDiagramPlugin.class);
      for(IDiagramPlugin service:serviceLoader){
          System.out.println(service.getName()+"--"+service.getCategory());
      }
}
}

输出的结果:markov--static

                       uppaal--static

总结:通过规范规定的接口或者超类,然后通过全名的配置文件名称在项目中找到,然后通过配置文件中的全名找到相应的子类,分别实例找到相应的属性输出,

通过ClassLoader完全可以自己读取相应的配置文件(实现了一些常用的框架的功能)









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值