Springboot自定义starter

news/2024/10/11 7:32:49/

文章目录

  • 前言
  • 1.引入依赖
    • 1.1 json的转换
    • 1.2 xml转换依赖
  • 2.定义Formate核心转化接口
  • 3.实现核心接口json和xml的转换
    • 3.1 json转换的实现
    • 3.2 xml转换的实现
  • 4. FormatProperties类
  • 5.FormatAutoConfiguration 类配置
  • 6.提供一个MyFormatTemplate 模板类
  • 7.注册到springboot
  • 8.创建spring.factories文件
  • 9.创建测试引入start
    • 9.1 环境搭建
    • 9.2 测试实体
    • 9.3 controller
    • 9.4 配置xml
    • 9.5 测试

前言

springboot的自动配置功能能够减少我们手动配置,约定大于配置。本篇我们手动写一个starter,自定义配置实现具体的格式转化,第三方接口经常会用到JSON格式或者XML格式传输数据,根据配置是转入json还是xml格式。

我们可以看看现有的默认配置的结构:
elasticsearch
elasticsearch
kafka的默认配置:
kafka

1.引入依赖

两者选着其中之一即可。

1.1 json的转换

    <!--可以使用ali的fastjson也可以使用google的gson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.56</version><!-- 可选 --><optional>true</optional></dependency><!--gson--><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version><optional>true</optional></dependency>

1.2 xml转换依赖

   <!--xstream xml转换工具--><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.9</version></dependency>

2.定义Formate核心转化接口

/*** 定义核心格式转换的处理器* */
public interface FormatProcessor {/*** 定义一个格式化的方法* @param obj* @param <T>* @return*/<T> String formate(T obj);
}

3.实现核心接口json和xml的转换

3.1 json转换的实现

/*** 实现json格式的转换*/
public class JsonFormatProcessor implements FormatProcessor{/**** @param obj* @return* @param <T>*/@Overridepublic <T> String formate(T obj) {return JSON.toJSONString(obj);}
}

3.2 xml转换的实现

/*** xml转换*/
public class XmlFormatProcessor implements FormatProcessor{@Overridepublic <T> String formate(T obj) {XStream xStream= new XStream();return xStream.toXML(obj);}
}

4. FormatProperties类

/*** 配置类,可以配置yml或者properties配置转化的具体的格式*/
@ConfigurationProperties(prefix = "spring.myformat")
public class FormatProperties {//定义默认的格式public static final String DEFAULT_FORMATE="com.elite.springboot.format.JsonFormatProcessor";/*** 配置外部的类型*/private String format;public String getFormat() {return format;}public void setFormat(String format) {this.format = format;}
}

5.FormatAutoConfiguration 类配置

/*** 核心格式转换自动配置类*/
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(FormatProperties.class)
public class FormatAutoConfiguration {//引入配置类private final FormatProperties properties;//构造器传入propertiespublic FormatAutoConfiguration(FormatProperties properties) {this.properties = properties;}/*** 根据配置加载格式处理器* @return*/@Bean@ConditionalOnClass(name="com.alibaba.fastjson.JSON")public FormatProcessor getFormatProcessor(){if(this.properties.getFormat()==null){return new JsonFormatProcessor();}else{if(this.properties.getFormat().equals("JSON")){return new JsonFormatProcessor();}else if(this.properties.getFormat().equals("XML")) {return new XmlFormatProcessor();}else{throw new RuntimeException();}}}
}

6.提供一个MyFormatTemplate 模板类

/*** 定义一个格式化模板类*/
public class MyFormatTemplate {//加载配置格式化类private FormatProcessor formatProcessor;public MyFormatTemplate(FormatProcessor processor) {this.formatProcessor = processor;}/*** 执行格式转化* @param obj* @return* @param <T>*/public <T> String doFormat(T obj) {return formatProcessor.formate(obj);}}

7.注册到springboot

/*** 自动注册模板类*/
@Configuration
@Import(FormatAutoConfiguration.class)
public class MyFormatAutoConfiguration {/*** 将模板类注入到bean* @param formatProcessor* @return*/@Beanpublic MyFormatTemplate helloFormatTemplate(FormatProcessor formatProcessor){return new MyFormatTemplate(formatProcessor);}
}

8.创建spring.factories文件

在resources下创建META-INF目录,再在其下创建spring.factories文件
install 打包,然后就可以在SpringBoot项目中依赖改项目来操作了。

9.创建测试引入start

9.1 环境搭建

 <!--引入自定义的starter--><dependency><groupId>com.elite.springboot</groupId><artifactId>format-spring-boot-starter</artifactId><version>1.0.0</version></dependency>

9.2 测试实体

public class Person {private String name;private int age;//省略 get set
}

9.3 controller

@RestController
public class FormatController {@AutowiredMyFormatTemplate myFormatTemplate;@GetMapping("/format")public String jsonformat(){Person p = new Person();p.setName("elite");p.setAge(22);String s = myFormatTemplate.doFormat(p);System.out.println("s="+s);return s;}
}

JSON格式测试:
JSON

9.4 配置xml

配置yml:

server:port: 8888
spring:myformat:format: XML

9.5 测试

xml


http://www.ppmy.cn/news/230165.html

相关文章

华为手机怎么识别提取图片文字?APP一键识别

平时我们用手机会接触到形形色色的图片文件&#xff0c;其中有一部分保存着咱们需要的文字信息。如果我们是华为手机怎么识别提取图片文字呢&#xff1f;给大伙介绍两种方式&#xff0c;有同样需求的小伙伴接着往下浏览吧。 1.“智慧识屏” 华为手机自带的“智慧识屏”可以实现…

华为nova8搭载鸿蒙,华为nova8参数及报价曝光_华为nova8手机参数

很多用户们的关注点都在华为mate40这个系列的手机上&#xff0c;很少会有人知道华为nova8这款手机。据说这个系列的手机将会在今年的年底上市&#xff0c;那么具体的一个参数信息怎么样呢? 1、手机屏幕 此前博主长安数码君曾曝光过华为nova8系列屏幕&#xff0c;可以看到华为n…

保持Git历史提交整洁,解决冲突

比较常见的场景&#xff0c;在代码提交场景&#xff0c;自己的代码和master冲突了&#xff0c;直接拉取master 解决冲突&#xff0c;很方便快捷&#xff0c;但是这样就会将其他开发同学的commit 拉到我们的分支&#xff0c;团队的代码合入时&#xff0c;需要代码同学帮忙code r…

华为怎么图片转文字

学习中&#xff0c;我们查阅书籍看到好的文字&#xff0c;好的内容&#xff0c;需要记下来&#xff0c;以备不时之需&#xff0c;但是用手抄很慢&#xff0c;而且效率低&#xff0c;如今科技这么发达&#xff0c;其实&#xff0c;只需要利用手上的手机拍张照&#xff0c;就能将…

《嵌入式系统》知识总结10:使用位带操作操纵GPIO

位操作 汇编层面 外设控制常要针对字中某个位&#xff08;Bit&#xff09;操作 以字节编址的存储器地址空间中&#xff0c;需要3步骤&#xff08;读出-修改-写回&#xff09; 1.&#xff08;从外设&#xff09;读取包含该位的字节数据 2. 设置该位为0或1、同时屏蔽其他位&am…

组合数学第五讲

Catalan numbers&#xff08;卡特兰数&#xff09; 先通过平衡括号引入卡特兰数序列的概念 1,2,5,14&#xff0c;...&#xff0c;这些数构成了卡特兰数序列&#xff0c;分别代表一共有i个括号时&#xff0c;括号排列构成的合法方案数【从左到右如果所有括号都能依次配对即是合…

python基础----05-----函数的多返回值、函数的多种参数使用形式、函数作为参数传递、lambda匿名函数

一 函数的多返回值 if __name__ __main__:# 演示使用多个变量&#xff0c;接收多个返回值def test_return ():return 1,hello,Truex,y,z test_return()print(x)print(y)print(z)1helloTrue二 函数的多种参数使用形式 分为以下四种。 2.1 位置参数 位置参数调用函数时根据…

突破软件交付不可能三角,企业级无代码如何实现卓越交付?

一、VUCA时代下项目交付面临的困境 软件开发或软件项目交付一直以来都存在着“不可能三角”&#xff0c;即成本、效率和质量三者难以兼得。 交付周期长、成本高、满意度低等一直是行业内长期存在的现象&#xff0c;甚至软件交付双方都习以为常。传统项目管理与软件实施过程难…