这篇文章介绍的,我们都知道SpringBoot项目都是由starter组成的,比如webstarter,redisstarter等等。我们通过maven引入相应的starter,几乎不需要配置就可以完美使用集成的springmvc或者redis。那么我们如何定制一个starter呢?本文将展示如何使用SpringBoot的自动配置功能来创建您自己的SpringBootStarter。假设需要为我们集成Toy作为启动框架或类,我们希望将其加载到Spring上下文中供我们在应用启动时调用。有的朋友可能会问为什么要这样做呢?最好直接将Toy声明为Springbean。答案肯定是可以的,但是本着快速上手SpringBoot的原则,我们可以像上面的Toy一样,通过引入starter来更快速的使用我们想要集成的功能或特性。再比如mybatis,因为我们不能修改mybatis的源码,其中一种方式是通过@Bean在方法上创建一个SqlSessionFactorybean,在SpringBoot应用中使用。第二种方式是创建starter,在需要mybatis的地方引入mybatis的starter,完成mybatis的集成。在很多项目需要集成mybatis的情况下,starter方式会更快更高效。项目结构本项目分为toy-sample-app和toy-spring-boot-startertoy-sample-app两个模块:演示如何引入startertoy-spring-boot-starter:自己创建的用于构建ToySpringBean的starter模块用于demo项目代码介绍toy-spring-boot-starterMETA-INF/spring.factories文件该文件指定了自动注入的类名,在SpringBoot应用启动时会初始化并加载到上下文中。org.springframework.boot.autoconfigure.EnableAutoConfiguration=\cn.bugkit.toy.autoconfigure.ToyAutoConfigurationToyAutoConfiguration文件@Configuration注解为Spring配置类@EnableConfigurationProperties(ToyProperties.class)注解指定需要使用的属性配置类包cn.bugkit.toy.autoconfigure;导入org.springframework.beans.factory.annotation.Autowired;导入org.springframework.boot.context.properties.EnableConfigurationProperties;导入org.springframework.context.annotation.Bean;导入org.springframework.context.annotation.Configuration;/***@authorbugkit*@since2022.2.24*/@Configuration@EnableConfigurationProperties(ToyProperties.class)publicclassToyAutoConfiguration{@AutowiredprivateToyPropertiestoyProperties;@BeanpublicToytoy(){returnnewToy(toyProperties.getName(),toyProperties.getPassword(),toyProperties.getWeight());}}ToyProperties文件该类声明了上述文件的toy()方法需要从application.properties文件中读取的属性,以构建所需的Toy对象。/***@authorbugkit*@since2022.2.24*/@Configuration@ConfigurationProperties(prefix="toy")publicclassToyProperties{私有字符串名称;私有字符串密码;私人重量;publicStringgetName(){返回名称;}publicvoidsetName(Stringname){this.name=name;}publicStringgetPassword(){返回密码;}publicvoidsetPassword(Stringpassword){this.password=password;}publicintgetWeight(){返回重量;}publicvoidsetWeight(intweight){this.weight=weight;}}Toy文件提供了我们需要的showInfo()方法,具体在toy-sample-app项目中用到publicclassToy{privateStringname;私有字符串密码;私人重量;publicToy(Stringname,Stringpassword,intweight){this.name=name;this.password=密码;this.weight=重量;}publicStringgetName(){返回名称;}公开cvoidsetName(Stringname){this.name=name;}publicStringgetPassword(){返回密码;}publicvoidsetPassword(Stringpassword){this.password=password;}publicintgetWeight(){返回重量;}publicvoidsetWeight(intweight){this.weight=weight;}publicvoidshowInfo(){System.out.println("====================开始============================");System.out.println("玩具[名称:"+名称+",密码:"+密码+",重量:"+重量+"]");System.out.println("===================================================");}}toy-sample-appproject这个项目用来演示如何使用我们自己的toy-spring-boot-starterpom文件pom文件引入starter项目的jar
