SpringBoot:手写一个 SpringBoot Starter
Posted ABin-阿斌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot:手写一个 SpringBoot Starter相关的知识,希望对你有一定的参考价值。
- 声明:原文作者:yuan_404
文章目录
1. 说明
- 启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库
命名归约:
-
官方命名:
- 前缀:spring-boot-starter-xxx
- 比如:spring-boot-starter-web…
-
自定义命名:
- xxx-spring-boot-starter
- 比如:mybatis-spring-boot-starter
2 . 编写启动器
-
在IDEA中新建一个空项目 spring-boot-starter-diy
-
新建一个普通Maven模块:demo-spring-boot-starter
-
新建一个Springboot模块:demo-spring-boot-starter-autoconfigure
-
点击apply即可,基本结构
-
在starter 中 导入 autoconfigure 的依赖
<!-- 启动器 --> <dependencies> <!-- 引入自动配置模块 --> <dependency> <groupId>com.demo</groupId> <artifactId>demo-spring-boot-starter-autoconfigure</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
-
将 autoconfigure 项目下,Pom中加入依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> </dependencies>
说明:
第一个依赖 主要是为编译器配置的 可以根据properties 鼠标右键 点到用这个属性的类上个第二个依赖 主要是为了自动装配
-
编写HelloProperties 配置类
// 前缀 demo.hello @ConfigurationProperties(prefix = "demo.hello") public class HelloProperties private String prefix; private String suffix; public String getPrefix() return prefix; public void setPrefix(String prefix) this.prefix = prefix; public String getSuffix() return suffix; public void setSuffix(String suffix) this.suffix = suffix;
这里我们要读取的配置就是demo.hello.prefix 和 demo.hello.suffix 的值
@ConfigurationProperties注解的作用就是读取配置文件指定属性的值
-
编写一个自己的服务
public class HelloService HelloProperties helloProperties; public HelloProperties getHelloProperties() return helloProperties; public void setHelloProperties(HelloProperties helloProperties) this.helloProperties = helloProperties; public String sayHello(String name) return helloProperties.getPrefix() + name + helloProperties.getSuffix();
-
编写自动配置类并注入bean,测试
@Configuration @ConditionalOnWebApplication //web应用生效 @EnableConfigurationProperties(HelloProperties.class) public class HelloServiceAutoConfiguration @Autowired HelloProperties helloProperties; @Bean public HelloService helloService() HelloService service = new HelloService(); service.setHelloProperties(helloProperties); return service;
说明:
-
@Configuration
标识本类是配置类(相当于spring中application.xml) -
@EnableConfigurationProperties(HelloProperties.class)
如果HelloProperties
中有注解@ConfigurationProperties
那么这个类就
会被加到spring上下文的容器中,也就是可以通过@Autowire来注入 -
@ConditionalOnClass
当类路径下有指定类的情况下 才进行下一步 -
@ConditionalOnMissingBean
当spring容器中没有这个Bean的时候才进行下一步
-
-
在resources编写一个自己的 META-INF\\spring.factories
```java
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\
com.demo.config.HelloServiceAutoConfiguration
```
-
编写完成后,可以安装到maven仓库中
-
项目包结构
3 . 新建项目测试自己写的启动器
-
新建一个SpringBoot 项目(需要引入 web 的启动器)
-
导入我们自己写的启动器
<dependency> <groupId>com.demo</groupId> <artifactId>demo-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
-
编写一个 HelloController 进行测试我们自己的写的接口
@RestController public class HelloController @Autowired HelloService helloService; @RequestMapping("/hello") public String hello() return helloService.sayHello("zxc");
-
编写配置文件 application.properties
demo.hello.prefix="Mystarter-perfix--" demo.hello.suffix="--Mystarter-suffix"
-
启动项目进行测试,结果成功
以上是关于SpringBoot:手写一个 SpringBoot Starter的主要内容,如果未能解决你的问题,请参考以下文章
手把手教你用VUE开发后台管理系统:搭建SpringBoo 2.xt环境