- 声明:原文作者: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")publicclassHelloProperties{privateString prefix;privateString suffix;publicStringgetPrefix(){return prefix;}publicvoidsetPrefix(String prefix){this.prefix = prefix;}publicStringgetSuffix(){return suffix;}publicvoidsetSuffix(String suffix){this.suffix = suffix;}}
这里我们要读取的配置就是demo.hello.prefix 和 demo.hello.suffix 的值@ConfigurationProperties注解的作用就是读取配置文件指定属性的值 - 编写一个自己的服务
publicclassHelloService{HelloProperties helloProperties;publicHelloPropertiesgetHelloProperties(){return helloProperties;}publicvoidsetHelloProperties(HelloProperties helloProperties){this.helloProperties = helloProperties;}publicStringsayHello(String name){return helloProperties.getPrefix()+ name + helloProperties.getSuffix();}}
- 编写自动配置类并注入bean,测试
@Configuration@ConditionalOnWebApplication//web应用生效@EnableConfigurationProperties(HelloProperties.class)publicclassHelloServiceAutoConfiguration{@AutowiredHelloProperties helloProperties;@BeanpublicHelloServicehelloService(){HelloService service =newHelloService(); 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 进行测试我们自己的写的接口
@RestControllerpublicclassHelloController{@AutowiredHelloService helloService;@RequestMapping("/hello")publicStringhello(){return helloService.sayHello("zxc");}}
- 编写配置文件 application.properties
demo.hello.prefix="Mystarter-perfix--"demo.hello.suffix="--Mystarter-suffix"
- 启动项目进行测试,结果成功
本文转载自: https://blog.csdn.net/Mango_Bin/article/details/129510016
版权归原作者 ABin-阿斌 所有, 如有侵权,请联系我们删除。
版权归原作者 ABin-阿斌 所有, 如有侵权,请联系我们删除。