当前位置: 首页 > news >正文

创建一个springboot starter页面

环境
java1.8
springboot 2.7.1
pom.xml文件
项目目录
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.yestea</groupId><artifactId>digest-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>digest-spring-boot-starter</name><description>digest-spring-boot-starter</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.17.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!--    <build>-->
<!--        <plugins>-->
<!--            <plugin>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
<!--            </plugin>-->
<!--        </plugins>-->
<!--    </build>--></project>

application.properties

spring.application.name=digest-spring-boot-starter
digest.type=md5

service目录
Digest.java 接口

package com.yestea.service;public interface Digest {String digest(String raw);
}

impl目录接口实现类
Md5Digest.java

package com.yestea.service.impl;import com.yestea.service.Digest;
import org.apache.commons.codec.digest.DigestUtils;public class Md5Digest implements Digest {public String digest(String raw) {System.out.println("使用MD5加密");return DigestUtils.md5Hex(raw);}
}

ShaDigest.java实现接口

package com.yestea.service.impl;import com.yestea.service.Digest;
import org.apache.commons.codec.digest.DigestUtils;public class ShaDigest implements Digest {public String digest(String raw) {System.out.println("使用SHA1加密");return DigestUtils.sha1Hex(raw);}
}

config目录setting.java 读取application.properties配置信息加载到类

package com.yestea.config;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;//@Component
@ConfigurationProperties(prefix = "digest")
public class setting {private String type;public String getType() {return type;}public void setType(String type) {this.type = type;}
}

config.java

package com.yestea.config;import com.yestea.service.Digest;
import com.yestea.service.impl.Md5Digest;
import com.yestea.service.impl.ShaDigest;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableConfigurationProperties(setting.class)
public class config {@Bean@ConditionalOnProperty(prefix = "digest", name = "type", havingValue = "md5")public Digest Md5Digest(){return new Md5Digest();}@Bean@ConditionalOnProperty(prefix = "digest", name = "type", havingValue = "sh")public Digest ShaDigest(){return new ShaDigest();}
}

EnableConfigurationProperties

@EnableConfigurationProperties 是 Spring Boot 提供的一个注解,主要作用如下:
启用配置属性功能
用于启用 @ConfigurationProperties 注解的类,使其能够从配置文件中自动绑定属性值
只有在添加了 @EnableConfigurationProperties 后,@ConfigurationProperties 注解的类才会被 Spring 容器管理
自动注册配置属性类
将指定的 @ConfigurationProperties 类注册为 Spring Bean
无需手动使用 @Component 或 @Configuration 

DigestSpringBootStarterApplication.java

package com.yestea;import com.yestea.config.setting;
import com.yestea.service.Digest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;import javax.annotation.Resource;//@SpringBootApplication
public class DigestSpringBootStarterApplication {public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(DigestSpringBootStarterApplication.class, args);setting bean = run.getBean(setting.class);System.out.println(bean);
//        Digest bean1 = run.getBean(Digest.class);
//        System.out.println(bean1);}}

注意打包成jar包时候@SpringBootApplication必须删除不然会提示有两个无法执行
下面是重头戏,引用时候必须知道从什么地方读取
resources目录下创建META-INF创建spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yestea.config.config

为什么是这个目录这个需要看源码
点开SpringBootApplication注解可以看到

public @interface SpringBootApplication {@AliasFor(annotation = EnableAutoConfiguration.class)Class<?>[] exclude() default {};@AliasFor(annotation = EnableAutoConfiguration.class)String[] excludeName() default {};@AliasFor(annotation = ComponentScan.class,attribute = "basePackages")String[] scanBasePackages() default {};@AliasFor(annotation = ComponentScan.class,attribute = "basePackageClasses")Class<?>[] scanBasePackageClasses() default {};@AliasFor(annotation = ComponentScan.class,attribute = "nameGenerator")Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;@AliasFor(annotation = Configuration.class)boolean proxyBeanMethods() default true;
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {};
}

AutoConfigurationImportSelector.class注解
摘抄一部分内容可以看到

    protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");return configurations;}

接下来进行maven clean install 本地仓库打包之后另外项目引入pom.xml文件
测试代码

package com.yestea;import com.yestea.service.Digest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MybatisPlus01test3 {@Autowiredprivate Digest digest;@Testpublic void test01(){System.out.println(digest.digest("123456"));}
}

执行结果

使用SHA1加密
7c4a8d09ca3762af61e59520943dc26494f8941b
http://www.dtcms.com/a/343474.html

相关文章:

  • LG P2617 Dynamic Rankings Solution
  • 1688 商品详情接口数据全解析(1688.item_get)
  • 关于从零开始写一个TEE OS
  • 如何安装 VMware Workstation 17.5.1?超简单步骤(附安装包下载)
  • Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第四章学习笔记及总结)
  • 一文讲清楚:场景、痛点、需求
  • mainMem.useNamedFile = “FALSE“ 的效果
  • UE5多人MOBA+GAS 52、下载源码构建引擎
  • 如何处理项目中棘手的依赖版本冲突问题
  • 软考中级【网络工程师】第6版教材 第3章 局域网 (下)
  • 构造参数注入解决循环依赖问题
  • 射频电路的完整性简略
  • rt-thread使用sfud挂载qspi flash的trace分析
  • Linux ELF二进制文件数字签名工具:原理与设计思路(C/C++代码实现)
  • SQL聚合情景解读
  • 【笔记】Facefusion3.3.2 之 NSFW 检测屏蔽测试
  • 代码随想录算法训练营27天 | ​​56. 合并区间、738.单调递增的数字、968.监控二叉树(提高)
  • 机器学习6
  • 机器学习-聚类算法
  • 告别研发乱局,决胜项目先机——全星APQP系统,为汽车部件制造商量身打造的数字化研发管理引擎
  • GPT5 / 深度研究功能 无法触发
  • 4.Shell脚本修炼手册---变量进阶知识
  • 加速你的故障排查:使用 Elasticsearch 构建家电手册的 RAG 应用
  • 如何实现文档处理全流程自动化?
  • 如何在日常开发中高效使用 Copilot
  • 无人机高科技,翱翔未来新天地
  • 对比学习与先验知识引导的特征提取网络在胶质瘤高风险复发区域预测中的应用|文献速递-深度学习人工智能医疗图像
  • GS-IR:3D 高斯喷溅用于逆向渲染
  • 2025年08月21日Github流行趋势
  • AI动画剧本、脚本、分镜头生成提示词