欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 【springboot】自定义starter

【springboot】自定义starter

2024/10/24 6:29:10 来源:https://blog.csdn.net/BlackPudding_/article/details/141326438  浏览:    关键词:【springboot】自定义starter

自定义一个starter,实现获取系统和程序信息。

0. 项目结构

org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件是用来加载自动配置类的,该文件必须放在META-INF/spring/目录下

1. 创建项目

        创建一个普通的maven项目,使用quickstart进行构建。

        这里需要注意jdk版本选择:springboot 2.0 需要选择jdk8+,springboot 3.0 需要选择jdk17+

2. 导入依赖

        导入父容器,进行版本控制;导入自动配置依赖,这是实现starter的核心依赖。

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 使用时导入以下内容 --><groupId>com.huan</groupId><artifactId>myStart</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>myStart</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
<!--  导入父容器,进行版本控制 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.8</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies>
<!--   *** 导入自动配置依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
</project>

        这里我删掉了默认的测试依赖,所以需要删掉test类,不然后面打包会报错。

3. 创建属性结构类

        这里使用@ConfigurationProperties(prefix = "huan.system")注解,来绑定外部配置文件中的属性到 Java 类中。

        例如,可以通过在application.propertiesapplication.yml配置文件中配置“huan.system.copyright”和“huan.system.author”属性批量配置SystemInfoPro 类的 copyrightauthor 字段。

@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "huan.system")
public class SystemInfoPro {private String copyright;private String author;
}

4. 创建和实现工具接口

        创建接口。

public interface ISystemInfoUtil {public String getAppInfo();public String getSystemInfo();
}

        实现接口。

public class SystemInfoUtil implements ISystemInfoUtil{@Autowiredprivate SystemInfoPro systemInfoPro;@Autowiredprivate ConfigurableEnvironment env;@Overridepublic String getAppInfo() {return systemInfoPro.getCopyright()+"\t"+systemInfoPro.getAuthor();}@Overridepublic String getSystemInfo() {return env.getProperty("os.name")+"\t"+env.getProperty("user.home");}
}

5. 创建自动配置类

        自动配置类中使用@EnableConfigurationProperties注解使@ConfigurationProperties注解生效,并将指定的类注入到ioc容器中进行管理。并配合@Conditional注解,只有达到某种条件才会进行自动配置,避免不必要的配置和依赖问题。

@Configuration
@EnableConfigurationProperties({SystemInfoPro.class}) 
@ConditionalOnClass({SystemInfoPro.class,ISystemInfoUtil.class})
public class SystemInfoAutoConfiguration {//业务类的bean@Bean@ConditionalOnMissingBean({ISystemInfoUtil.class})//容器中没有ISystemInfoUtil类型的bean时,创建一个public ISystemInfoUtil systemInfoUtil(){System.out.println("创建了SystemInfoUtil类型的bean");return new SystemInfoUtil();}
}

6. 创建.imports 文件

        在resources/META-INF/spring/目录下创建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,并引入自动配置类。

# 引入系统信息自动配置
com.huan.SystemInfoAutoConfiguration

        注意:当正确配置.imports文件后,图标会发生变化,如果没改,可能是结构出了问题,比如没有spring文件夹之类的。

7. 打包starter为非执行文件

        使用install进行打包,将jar放入本地仓库。

8. 使用starter

        1. 创建一个springboot项目

        2. 引入自定义starter依赖

        <dependency><groupId>com.huan</groupId><artifactId>myStart</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

        3. 创建控制类

        在控制类中注入工具类,并使用其方法。

@RestController
public class HelloController {@Autowiredprivate ISystemInfoUtil systemInfoUtil;@RequestMapping("/")public String index() {return systemInfoUtil.getSystemInfo()+"\n"+systemInfoUtil.getAppInfo();}
}

        4. 配置配置文件

huan.system.copyright=huan info company
huan.system.author=huan

        5. 启动springboot

        正确创建了SystemInfoUtil类型的bean。

        访问网页。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com