手写自定义springboot-starter,感受框架的魅力和原理

一、前言Springboot的自动配置原理,面试中经常问到,一直看也记不?。?不如手写一个starter,加深一下记忆 。看了之后发现大部分的starter都是这个原理,实践才会记忆深刻 。核心思想:约定大于配置
二、初探starter启动原理我们直接看看官网的starter是怎么设计的,仿照这写一个就行了!
我们Ctrl点击<artifactId>spring-boot-starter-web</artifactId>,进入内部pom,我们发现里面有个
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.5.3</version><scope>compile</scope></dependency>在此Ctrl点击<artifactId>spring-boot-starter</artifactId>进入starter内部pom:我们发现之后干活的就是这个包依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.5.3</version><scope>compile</scope></dependency>

手写自定义springboot-starter,感受框架的魅力和原理

文章插图
我们现在创建两个项目即可:
  • spring-boot-starter(启动器)
  • spring-boot-starter-autoconfigure(自动配置包)
小编看到官方这么写的提醒,大家可以按照官网的进行起名称,不要学小编哈?。?
您应该确保为您的启动器提供适当的命名空间 。不要以 . 开头的模块名称spring-boot,即使您使用不同的 Maven groupId 。我们将来可能会为您自动配置的内容提供官方支持 。根据经验,您应该在启动器之后命名组合模块 。例如,假设您正在为“acme”创建一个启动器,并且您命名自动配置模块acme-spring-boot和启动器acme-spring-boot-starter 。如果您只有一个模块将两者结合起来,请将其命名为acme-spring-boot-starter.
三、项目搭建1. 新建空白项目
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
输入总的项目名称
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
在空白项目里新建两个,这里可以分开单独建立,这里小编跟着雷神一样了,就不单独建立项目了?。?
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
2. 新建maven项目
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
包名和名称:
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
3. 新建springboot项目
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
4. 项目架构这里把没有用的都删除了?。】梢圆簧?
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
四、配置1. 在starter项目中引入自己的autoconfigure依赖就是上面建立项目的设置的
<dependencies><dependency><groupId>com.wang</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies>
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
2. spring-boot-autoconfigure pom配置<properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>${spring-boot.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>还是把没用的东西删除了 , 剩余如下图:
手写自定义springboot-starter,感受框架的魅力和原理

文章插图
五、编写autoconfigure项目1. 配置一个bean首先删除了自动启动类 , 咱们用不到,在spring-boot-autoconfigure项目中新建一个bean,此时不需要让这个bean在容器中,我们写一个自己配置 , 让他自动加入到容器中 。这就是自动配置的思想
/** * 这里不需要让在容器中,我们写一个自己配置,让他自动加入到容器中 * @author wangzhenjun * @date 2022/10/14 16:26 */public class HelloService {@Autowiredprivate MyProperties myProperties;public String HelloWord (String username){return myProperties.getPrefix() + username + myProperties.getSuffix();}}

推荐阅读