本文只对springboot自定义启动器的具体实现进行描述,不涉及springboot自动装配原理的介绍。
对springboot自动配置原理感兴趣的请移步
狂神说SpringBoot02:运行原理初探
【springboot】自动装配原理
springboot自定义启动器的实现步骤如下:
第一步:引入spring-boot-autoconfigure包依赖
在创建好的maven工程在pom中引入spring-boot-autoconfigure的依赖,即需要使用springboot的自动配置能力。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency>
第二步:新建自动配置类xxxAutoConfiguration
新建自动配置类xxxAutoConfiguration,类上加注解@Configuration指定为配置类,加@ConditionalOnClass注解指定在classpath路径下有指定的class类时才实例化bean同时,配置类中增加方法创建需要bean类例,需加上注解@Bean和@ConditionalOnMissingBean,此注解表示只有在spring容器中没有对应bean实例时进行bean的创建。
配置类如下:
package cn.com.wjqhuaxia; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author wjqhuaxia * @create 2021-03-29 8:12 * * 自定义springboot starter的步骤如下: * 1.在创建maven工程时,在pom中引入spring-boot-autoconfigure的依赖,即需要使用springboot的自动配置能力 * 2.新建自动配置类xxxAutoConfiguration,类上加注解@Configuration指定为配置类,加@ConditionalOnClass注解指定在classpath路径下有 * 指定的class类时才实例化bean * 同时,配置类中增加方法创建需要的bean类例,需加上注解@Bean和@ConditionalOnMissingBean,此注解表示只有在spring容器中没有对应bean * 实例时进行bean的创建 * 3.在项目中的resources目录下新建META-INF文件夹,并新spring.factories文件,在文件中指定上一步中写好的配置类 * 如:org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.com.wjqhuaxia.TestAutoConfiguration * --------------- 此时,已完成springboot的启动器自定义配置 ----------------------------- * 4.使用时直接从spring容器中取出配置好的bean即可。 * */ @Configuration @ConditionalOnClass({StarterTest.class}) public class TestAutoConfiguration { @Bean @ConditionalOnMissingBean(StarterTest.class) public StarterTest starterTest(){ StarterTest starterTest = new StarterTest(); return starterTest; } }
自动配置的目标类如下:
package cn.com.wjqhuaxia; /** * 自动配置的-->目标类 * @author wjqhuaxia * @create 2021-03-29 8:10 */ public class StarterTest { public String test(String name){ System.out.println("This is my starter! " + name); return "This is my starter! " + name; } }
第三步:spring.factories文件中指定上一步中写好的配置类
在项目中的resources目录下新建META-INF文件夹,并新建spring.factories文件,在文件中指定上一步中写好的配置类
如:org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.com.wjqhuaxia.TestAutoConfiguration
此时,已完成springboot的启动器自定义配置
以下为测试类:
package cn.com.wjqhuaxia; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** * @author wjqhuaxia * @create 2021-03-29 9:35 */ @SpringBootApplication public class Application { @Autowired private StarterTest starterTest; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @RestController public class EchoController { @GetMapping(value = "/echo/{name}") public String echo(@PathVariable String name) { return starterTest.test(name); } } }
启动项目并进行测试,即可测试spring容器中是否已存在配置好的自定义配置信息。亲测有效!