JAVA基础ServiceLoader

ServiceLoader是用来分动态的获取接口实现的较原始的方式。首先如果想使用它的特性的话,先要理解java的编译和jar包是分开的这个概念。很多时候我们依赖IDE去完成所有的工作,所以会将打包也做作开发的一部分,觉得改jar包里面的东西都算是重新编译。这样的话就会觉得这个工具没有什么用。但是如果分离开的话。这个工具就变得很简单好使。想比spring的ioc要轻量很多。具体怎么用我就不说了网上一找一大堆。我只总结一下最主要的几点就行了。要想使用这个工具重点是三点。路径、文件、内容。

 路径是死的记住就行了。实在记不住翻源码吧。第一行就是:

private static final String PREFIX ="META-INF/services/";

 

文件这个是要跟接口的全路径名完全一致的。这是为什么呢?起这么古怪的名子真的好吗?看看代码吧。他是用下面这种方式取的配置文件名。所以没办法。只能这么玩了。

String fullName = PREFIX +service.getName();

 

内容这个很简单就是实现类的全路径名。不过有一点要注意。一个实现类写一行就行了。因为你写一百行也是一样的。只会实例化一次。代码是这样写的。

if (!providers.containsKey(ln) &&!names.contains(ln))

names.add(ln);

 

下面来个例子吧,请参考:

路径:

META-INF\services

文件:

com.test.ServiceLoader.ServiceI

内容:

com.test.ServiceLoader.ServiceImp

com.test.ServiceLoader.Service2Imp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值