千家信息网

Spring Boot starter的原理是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"Spring Boot starter的原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spring Boot start
千家信息网最后更新 2026年11月01日Spring Boot starter的原理是什么

这篇文章主要讲解了"Spring Boot starter的原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Spring Boot starter的原理是什么"吧!

Spring Boot starter原理

Spring Boot 将常见的开发功能,分成了一个个的starter,这样我们开发功能的时候只需要引入对应的starter,而不需要去引入一堆依赖了!starter可以理解为一个依赖组,其主要功能就是完成引入依赖和初始化配置。Spring 官方提供的starter 命名规范为 spring-boot-starter-xxx ,第三方提供的starter命名规范为 xxx-spring-boot-starter 。

这里我们以 RocketMQ 的依赖 rocketmq-spring-boot-starter 来学习 starter的原理。

在项目中引入 rocketmq-spring-boot-starter 之后,实际上就引入了 rocketmq 的一些相关依赖。

在 rocketmq-spring-boot 中有一个自动装配的类RocketMQAutoConfiguration ,我截取了其中的一小段代码,一起来看看。

@Configuration@EnableConfigurationProperties(RocketMQProperties.class)@ConditionalOnClass({MQAdmin.class})@ConditionalOnProperty(prefix = "rocketmq", value = "name-server", matchIfMissing = true)@Import({MessageConverterConfiguration.class, ListenerContainerConfiguration.class, ExtProducerResetConfiguration.class, RocketMQTransactionConfiguration.class})@AutoConfigureAfter({MessageConverterConfiguration.class})@AutoConfigureBefore({RocketMQTransactionConfiguration.class})public class RocketMQAutoConfiguration {    private static final Logger log = LoggerFactory.getLogger(RocketMQAutoConfiguration.class);    public static final String ROCKETMQ_TEMPLATE_DEFAULT_GLOBAL_NAME =        "rocketMQTemplate";    @Autowired    private Environment environment;    @Bean(destroyMethod = "destroy")    @ConditionalOnBean(DefaultMQProducer.class)    @ConditionalOnMissingBean(name = ROCKETMQ_TEMPLATE_DEFAULT_GLOBAL_NAME)    public RocketMQTemplate rocketMQTemplate(DefaultMQProducer mqProducer,        RocketMQMessageConverter rocketMQMessageConverter) {        RocketMQTemplate rocketMQTemplate = new RocketMQTemplate();        rocketMQTemplate.setProducer(mqProducer);        rocketMQTemplate.setMessageConverter(rocketMQMessageConverter.getMessageConverter());        return rocketMQTemplate;    }}
  • @Configuration 说明这是一个配置类,类中被@Bean注解了的方法,就是spring的一个bean,例如rocketMQTemplate。

  • @EnableConfigurationProperties,启用被@ConfigurationProperties的bean,这里引入了 RocketMQProperties 。

RocketMQProperties 就是需要在yml文件中写入的属性。

@ConfigurationProperties(prefix = "rocketmq")public class RocketMQProperties {    private String nameServer;    private String accessChannel;    private Producer producer;    private Consumer consumer = new Consumer();}

在Spring Boot项目启动的时候默认只会扫描下级目录下带 @Configuration 注解的类,那么像本文中提到的 RocketMQAutoConfiguration 是如何扫描的呢?其实项目启动的时候会去加载项目中所有的 spring.factories 文件,然后加载对应的配置类,因此我们就需要在 spring.factories 中只指定需要扫描的类。

原理搞明白了,接下来我们就简单实现一个自己的starter!这个starter的主要作用就是给一个对象尾部拼接一个字符串!

一、新建项目

新建一个名为 javatip-spring-boot-starter 的项目,并且引入下面的依赖

    org.springframework.boot    spring-boot-starter

二、新增配置类

配置类对应的properties文件中的属性为javatip.name;

@ConfigurationProperties(prefix = "javatip")public class JavatipPorperties {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

三、新增拼接字符串的方法

此方法主要就是为对象拼接一个固定的字符串

public class StrUt {    private String name;    public String strTo(Object object){        return object +"---"+ getName();    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

四、新增自动配置类

使用注解 @EnableConfigurationProperties 启用 JavatipProperties 配置类

使用注解 @Configuration 配合 @Bean 注册一个拼接字符串的bean对象。

@Configuration@EnableConfigurationProperties(JavatipPorperties.class)public class JavatipAutoConfiguration {    @Autowired    private JavatipPorperties javatipPorperties;    @Bean    public StrUt strut(){        StrUt strut = new StrUt();        strut.setName(javatipPorperties.getName());        return strut;    }}

五、新增配置发现文件

在resources文件夹中新建 META-INF 文件夹,在 META-INF 文件夹中新建配置发现文件 spring.factories,并且将自动配置类写到文件里。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.javatip.str.configuration.JavatipAutoConfiguration

六、打包测试

使用 mvn install 命令将项目打包推送到本地maven仓库,然后新建一个测试项目,引入打包好的依赖。

    com.javatip    javatip-spring-boot-starter    0.0.1-SNAPSHOT

在 application.yml 文件中写入自动拼接的字符串对应的属性 javatip.name 。

javatip:  name: Java旅途

然后手写一个测试类:

@RestControllerpublic class Test {        @Autowired    private StrUt strUt;    @GetMapping("test")    public String test(){        String str = strUt.strTo("who are you?");        return str;    }}

运行测试类后,页面返回了

who are you?---Java旅途

这样,一个简单的starter就写好了,只要理解了starter的原理,实现起来就很简单,第一点就是starter相当于一个依赖组,另一点就是starter可以完成初始化配置。

感谢各位的阅读,以上就是"Spring Boot starter的原理是什么"的内容了,经过本文的学习后,相信大家对Spring Boot starter的原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

配置 文件 原理 就是 项目 字符 字符串 注解 学习 测试 功能 对象 属性 文件夹 时候 内容 方法 旅途 中新 开发 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技 上海互联网科技有限公司 互联网金融公司科技 小马过河互联网科技 时间互联网络科技 湖南洣水互联网科技有限公司扣款 来此购互联网科技有限公司 互联网经济与金融科技 互联网科技研发水平 互联网科技人工智能实验室 996高科技互联网公司 2021互联网科技公司排名 智帮互联网科技公司最近动向 领航科技大厦互联网公司 半导体行业属于互联网高科技类吗 九思连强互联网电子科技有限公司 杭州融税互联网科技有限公司 科技互联网专业务虚会材料 互联网的黑科技实验室 互联网企业和网络科技有限公司 工业互联网科技新基建 奇酷互联网科技公司 苏州大垚互联网科技 上海卓越科技 互联网 剑昆互联网络科技有限公司临桂 苏州铭阳互联网科技有限公司 产业互联网科技服务公司 长沙渺峰互联网科技有限公司 互联网科技品牌 现代互联网科技公司
0