b java 之 serviceLoader详解 & serviceLoader.load(XXX.class)

—> go to 总目录

一、JNDI与ServiceLoder

JNDI更复。ServiceLoder是个简单实现,更常用。

1.1 JNDI

JNDI介绍

提供可插拔式的服务—能够扫描目录或者远程类的资源,加载到内存中,并执行。
在这里插入图片描述

  • API Application Programming Interface
    应用程序能够能够使用的接口,用来操作第三方服务
  • SPI Service Provider Interface
    服务提供商,按照一定规范实现服务,然后被解析加载。
    一般是分为服务实现+配置信息。首先扫描配置信息,然后加载服务实现,然后被使用

1.2 ServiceLoder

位置
openjdk14

module package class
java.base java.util serviceLoder

基于SPI思想 jdk自带加载类的方式。分为服务实现+配置信息,通过扫描配置信息加载服务实现

用途
用于想不使用依赖,在代码中仅仅使用服务功能的API,而靠读取目录下的jar包信息,加载业务实现

在这里插入图片描述

二、ServiceLoder的SPI

2.1 SPI的基本流程

  • 服务的接口约定
    比如解码器,加载一个PNG图片,依赖PNG的解码器。但是开发时仅仅需要定义接口 getEncoder和getDecoder即可。
     package com.example;
     public interface CodecFactory {
   
         Encoder getEncoder(String encodingName);
         Decoder getDecoder(String encodingName);
     }
  • 服务实现
    PNG解码器真正的实现,实现CodecFactory,完成对PNG的处理逻辑
  • 服务注册
    往往需要扫描配置文件,来获得实现类的信息。所以依赖一个
    配置文件com.corn.javalib.PNGCodec中配置
PNG=com.corn.PNGCodec
  • 服务发现与使用
    依赖Service的lode函数,通过扫描配置在指定路径下的配置文件,加载解码器,实现实现注入
ServiceLoader<CodecFactory> loader = ServiceLoader.load(CodecFactory.class);
     for (CodecFactory factory 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值