手把手教你手写一个最简单的 Spring Boot Starter (2)

业务处理类,实现 Java 对象转换为带有指定前后缀的 JSON 字符串。

package com.nobody.myjson.service; import com.alibaba.fastjson.JSON; /** * @Description 业务处理类 * @Author Mr.nobody * @Date 2021/2/27 * @Version 1.0 */ public class MyJsonService { // 前缀 private String prefixName; // 后缀 private String suffixName; /** * 将Java对象转为带有指定前后缀的JSON字符串 * * @param o 需要转换的Java对象 * @return 转换后的字符串 */ public String objectToMyJson(Object o) { return prefixName + JSON.toJSONString(o) + suffixName; } public String getPrefixName() { return prefixName; } public void setPrefixName(String prefixName) { this.prefixName = prefixName; } public String getSuffixName() { return suffixName; } public void setSuffixName(String suffixName) { this.suffixName = suffixName; } }

配置类,定义需要的配置信息和默认配置项,并指明关联配置文件的配置项前缀。它可以把相同前缀的配置信息通过配置项名称映射成实体类的属性中。

package com.nobody.myjson.config; import org.springframework.boot.context.properties.ConfigurationProperties; /** * @Description 配置类(类名一般为模块名+Properties) nobody.json为Starter使用者通过yml配置文件动态修改属性值的变量名前缀 * @Author Mr.nobody * @Date 2021/2/27 * @Version 1.0 */ @ConfigurationProperties(prefix = "nobody.json") public class MyJsonProperties { // Starter使用者没在配置文件中配置prefixName属性的值时的默认值 public static final String DEFAULT_PREFIX_NAME = "@"; // Starter使用者没在配置文件中配置suffixName属性的值时的默认值 public static final String DEFAULT_SUFFIX_NAME = "@"; private String prefixName = DEFAULT_PREFIX_NAME; private String suffixName = DEFAULT_SUFFIX_NAME; public String getPrefixName() { return prefixName; } public void setPrefixName(String prefixName) { this.prefixName = prefixName; } public String getSuffixName() { return suffixName; } public void setSuffixName(String suffixName) { this.suffixName = suffixName; } }

自动装配类,使用 @Configuration 和 @Bean 来进行自动装配,注入 Spring 容器中。

package com.nobody.myjson.config; import com.nobody.myjson.service.MyJsonService; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Description 自动装配类 * @Author Mr.nobody * @Date 2021/2/27 * @Version 1.0 */ @Configuration // 标识此类是配置类 @ConditionalOnClass(MyJsonService.class) // 表示只有指定的class在classpath上时才能被注册 @EnableConfigurationProperties(MyJsonProperties.class) // 激活@ConfigurationProperties public class MyJsonConfiguration { private MyJsonProperties myJsonProperties; // 自动注入配置类 public MyJsonConfiguration(MyJsonProperties myJsonProperties) { this.myJsonProperties = myJsonProperties; } // 创建MyJsonService对象,注入到Spring容器中 @Bean @ConditionalOnMissingBean(MyJsonService.class) public MyJsonService myJsonService() { MyJsonService myJsonService = new MyJsonService(); myJsonService.setPrefixName(myJsonProperties.getPrefixName()); myJsonService.setSuffixName(myJsonProperties.getSuffixName()); return myJsonService; } }

在 src/main/resources/META-INF目录下新建 spring.factories 文件,输入以下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.nobody.myjson.config.MyJsonConfiguration

SpringBoot 项目启动时,类加载器会从 META-INF / spring.factories 加载给定类型的工厂实现的完全限定类名。也就是说类加载器得到工程中所有 jar 包中的 META-INF/spring.factories 文件资源,从而得到了一些包括自动配置相关的类的集合,然后将它们实例化,放入 Spring 容器中。

最终项目结构如下:

手把手教你手写一个最简单的 Spring Boot Starter

在开发工具 IDEA 通过 Maven 的 install 命令进行构建打包。或者在项目的目录下,打开命令行窗口,使用mvn install命令进行构建打包。打包后,会在工程的 target 目录下生成一个 jar 包,并且在 maven 本地仓库也会生成相应的 jar 包。

手把手教你手写一个最简单的 Spring Boot Starter


手把手教你手写一个最简单的 Spring Boot Starter


手把手教你手写一个最简单的 Spring Boot Starter


手把手教你手写一个最简单的 Spring Boot Starter

使用自定义的 Starter

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfxdp.html