0


SpringBoot:手写一个 SpringBoot Starter

  • 声明:原文作者:yuan_404

文章目录

1. 说明

  • 启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库

命名归约:

  • 官方命名:- 前缀:spring-boot-starter-xxx- 比如:spring-boot-starter-web…
  • 自定义命名:- xxx-spring-boot-starter- 比如:mybatis-spring-boot-starter

2 . 编写启动器

  1. 在IDEA中新建一个空项目 spring-boot-starter-diy
  2. 新建一个普通Maven模块:demo-spring-boot-starter
  3. 新建一个Springboot模块:demo-spring-boot-starter-autoconfigure
  4. 点击apply即可,基本结构
  5. 在starter 中 导入 autoconfigure 的依赖<!-- 启动器 --><dependencies><!-- 引入自动配置模块 --><dependency><groupId>com.demo</groupId><artifactId>demo-spring-boot-starter-autoconfigure</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies>
  6. 将 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 鼠标右键 点到用这个属性的类上个第二个依赖 主要是为了自动装配
  7. 编写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注解的作用就是读取配置文件指定属性的值
  8. 编写一个自己的服务publicclassHelloService{HelloProperties helloProperties;publicHelloPropertiesgetHelloProperties(){return helloProperties;}publicvoidsetHelloProperties(HelloProperties helloProperties){this.helloProperties = helloProperties;}publicStringsayHello(String name){return helloProperties.getPrefix()+ name + helloProperties.getSuffix();}}
  9. 编写自动配置类并注入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的时候才进行下一步
  10. 在resources编写一个自己的 META-INF\spring.factories
```java
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.demo.config.HelloServiceAutoConfiguration

```

  1. 编写完成后,可以安装到maven仓库中
  2. 项目包结构

3 . 新建项目测试自己写的启动器

  1. 新建一个SpringBoot 项目(需要引入 web 的启动器)
  2. 导入我们自己写的启动器<dependency><groupId>com.demo</groupId><artifactId>demo-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>
  3. 编写一个 HelloController 进行测试我们自己的写的接口@RestControllerpublicclassHelloController{@AutowiredHelloService helloService;@RequestMapping("/hello")publicStringhello(){return helloService.sayHello("zxc");}}
  4. 编写配置文件 application.propertiesdemo.hello.prefix="Mystarter-perfix--"demo.hello.suffix="--Mystarter-suffix"
  5. 启动项目进行测试,结果成功
标签: spring boot java spring

本文转载自: https://blog.csdn.net/Mango_Bin/article/details/129510016
版权归原作者 ABin-阿斌 所有, 如有侵权,请联系我们删除。

“SpringBoot:手写一个 SpringBoot Starter”的评论:

还没有评论