SpringBoot自定义start
随着Java
的不断发展,Spring的出现为开发人员解决了bean
管理的烦恼,但是其配置随着Java
的使用者不断增加,其配置变得及其复杂。使用Spring
配置一个web应用程序,需要配置许多配置。于是SpringBoot
为简化这一过程定制了SpringBoot-Strater
机制,减少开发人员对配置文件编写复杂的工作,只需引入对应start,配置文件配置对应参数即可。自定义starter可以说是对SpringBoot的自动配置原理的扩展应用。
实现原理可以参考:SpringBoot自动配置原理
一、starter 启动器定义
启动器只用来做依赖导入,启动器依赖自动配置模块,别人只需要引入启动器即可(starter)。
以springboot官方的自动配置模块为例:spring-boot-autoconfigure-2.5.5.jar
二、自定义 starter 启动器
通过上面的了解,大致知道了什么是springboot的启动器,下面就自行实现一个我们自己的自定义starter 启动器。其主要步骤主要有以下几个步骤完成:
1、编辑相关业务的核心代码模块
2、配置业务流程所需要的自动配置类
3、配置Start模块,让使用者自需要引用Starter
依赖即可快速使用其核心功能
自定义starter demo项目结构如下,wei-business为核心代码模块,实现基础类以及方法;wei-autoconfigure为自动配置模块,实现bean的自动配置注入。
2.1 构建核心业务代码模块
新建一个简单的项目,编写测试业务类
public class BusinessCore {
public void getCoreInfo() {
System.out.println("获取到业务核心类信息...");
}
}
项目pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wei</groupId>
<artifactId>wei-business</artifactId>
<version>0.0.1-SNAPSHOT</version>
2.2 配置自动配置类
1、新建一个简单的项目,项目pom.xml文件如下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wei</groupId>
<artifactId>wei-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>wei-autoconfigure</name>
<dependencies>
<!-- 自定义业务 -->
<dependency>
<groupId>com.wei</groupId>
<artifactId>wei-business</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- springboot启动依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- springboot自动配置核心依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- springboot 配置文件处理器(导入该依赖输入配置文件时可提示) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!-- 这个依赖的实质作用是添加一些类,从而达到条件装配的作用 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 打包是生效,如果是通过类条件注入,那么该作用域必不可少 -->
<scope>provided</scope>
</dependency>
</dependencies>
2、实现一个获取绑定配置类
@EnableConfigurationProperties //开启配置属性,从配置文件获取属性
@ConfigurationProperties("wei.hello") // 设置配置属性前缀
public class Hello {
private String name = "默认名";
private String sex = "默认性别";
private String age = "默认年龄";
// 自行实现get、set方法
}
3、实现核心的自动配置类
@Configuration // 标志为配置类
@ConditionalOnWebApplication // 是web类的时候加载
@EnableConfigurationProperties(Hello.class) // 使得 Hello 配置属性文件生效
public class MyAutoConfiguration {
@Bean
@ConditionalOnMissingBean(Hello.class) // 不存在时注入
public Hello hello() {
System.out.println("自动配置注入hello");
return new Hello();
}
}
4、配置完bean
实例以及自动配置类
接下来也是是要使整个自动配置类生效的核心配置,在上面的讲解中自需要自定义一个spring.factories
文件即可,即在resources
目录下新建META-INF
目录,在该目录下新增spring.factories
文件。
# Auto Configure 自动配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.wei.MyAutoConfiguration
2.3 自定义starter测试使用
1、首先按照依赖顺序 maven install 编译安装项目 jar 包
2、引入自定义pom依赖
<!-- 自定义 start -->
<dependency>
<groupId>com.wei</groupId>
<artifactId>wei-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
3、application.yml 添加自定义starter中配置属性,
# 自定义 start 配置
wei:
hello:
name: "lmw"
sex: "男"
age: 18
4、编写测试方法
@RestController
public class HelloController {
// 自动配置注入bean
@Autowired
Hello hello;
@GetMapping("/hello")
public String hello(){
// start 中普通类
BusinessCore core = new BusinessCore();
core.getCoreInfo();
// start 中bean
return hello.getName();
}
}
5、启动项目,测试
启动时可以看到自定义starter中注入hello bean时的日志输出
访问接口测试,查看结果,自定义starter成功