架构之第三方框架pinyin4j与hutool搭配使用原理

一、工作原理

Hutool工具将包括pinyin4j等翻译工具插件绑定。实现通过spi接口的方式实现调用,底层实现可自由切换
注:Hutool绑定的pinyin插件有如下图几种。也就是没有添加maven依赖如pinyin4j等拼音插件。

注:若没有依赖pinyin插件。使用时会报如下错误。但是通过接下来要说的通过SPI即可不是用插件也能自己制作pinyin实现类,并通过Hutool工具类调用

二、SPI接口实现(自定义实现类对接Hutool pinyin工具)

1. 什么是SPI

注:是一种服务发现机制,为很多框架拓展提供了可能。
注:此处是重点 源码中链接阅读文章SPI机制》》深入理解SPI机制》》

2. 链接来源

注:链接从源码类的注释中获取

三、编码实现和测试

注:操作内容包括。添加依赖,main,打印数据

1. maven依赖
xml 复制代码
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.20</version>
</dependency>
2. 自定义实现

注:通过理解学习如何使用SPI机制,创建自己的pinyin翻译类

java 复制代码
package org.home;

import cn.hutool.extra.pinyin.PinyinEngine;

public class LocalPinYin implements PinyinEngine {
    public String getPinyin(char c) {
        return "getPinyin 济南 c";
    }

    public String getPinyin(String str, String separator) {
        return "getpinyin 济南 str";
    }
}
3. 执行输出

注:通过main方法输出自定义pinyin实现类返回的内容

复制代码
# 输出加载到的实现类。可以在main方法中通过执行Hutool工具类加载SPI接口实现类的方式检查创建SPI实现类是否可以成功调阅。
PinyinEngine engine = ServiceLoaderUtil.loadFirstAvailable(PinyinEngine.class);
System.out.println(engine);
4. ServiceLoad.load类加载

注:Hutool内部使用jdk的Service.load加载类。

总结

1. 勤于思考,还能发现更多问题。

注:从Hutool中知道了SPI, 但是pinyin4j中并没有查看到META-INF/services的存在,反想查看,他却在Hutool的肚子里

2. 使用SPI的框架的优点

注:能够灵活的使用相同功能的不同插件。 通俗讲 想用的插件通过更换mvn依赖即可 精髓在这,特别方便

相关推荐
sheji34165 分钟前
【开题答辩全过程】以 慧医疗网上医院管理系统为例,包含答辩的问题和答案
java
子一!!6 分钟前
JavaEE初阶第一课时==计算机与系统讨论==
java·java-ee
小二·6 分钟前
Go 语言系统编程与云原生开发实战(第37篇)
java·云原生·golang
yxc_inspire6 分钟前
大二 Java 后端学习记录:集合框架(List/Queue/Map/Set)+ 泛型 + 迭代器
java·开发语言
xuansec6 分钟前
【JavaEE安全】Java反射机制:核心原理、实战应用与安全风险管控
java·安全·java-ee
co_wait6 分钟前
【C++ STL】map容器的基本使用
java·c++·rpc
蜜獾云8 分钟前
设计模式之原型模式:以自己为原型,自己实现自己的对象拷贝逻辑
java·设计模式·原型模式
nhc08810 分钟前
贵州本地企业做软件定制开发,怎么选靠谱服务商?
java·微信小程序·软件开发·小程序开发
The Open Group11 分钟前
架构之道:平衡企业复杂性的艺术 ——TOGAF® 如何让冲突共存
架构
Predestination王瀞潞14 分钟前
Mapper接口与XML映射文件的绑定机制(Mapper接口的动态代理实现机制)
xml·java·mybatis