假如 没有 Spring Boot Starter,我们有两种方式来创建 Spring Bean。

  • spring xml 模式 (远古模式,并不推荐)
  • spring API 来创建 Spring Bean

1 spring API 来创建 Spring Bean

接下来通过 Spring 的基础 API 来创建 Spring Bean。

  1. 创建 Bean 类:创建一个普通的 Java 类,定义需要注入的属性、构造函数、以及方法。
  2. 在类上添加注解:使用 Spring 的注解将该类声明为一个 Bean。可以使用 @Component、@Service、@Repository、@Controller 等注解,这些注解都被 Spring 识别为 Bean。
  3. 配置 Bean:可以通过 Java 配置类使用 使用 @Configuration 和 @Bean 注解配置 Bean。

下面是一个示例代码片段:

// Bean 类
public class MyService {
private MyDao myDao; public MyService(MyDao myDao) {
this.myDao = myDao;
} public void doSomething() {
// do something with myDao
}
} // Bean 配置类
@Configuration
public class MyConfig {
@Bean
public MyService myService(MyDao myDao) {
return new MyService(myDao);
} @Bean
public MyDao myDao() {
return new MyDao();
}
}

在上面的示例中,我们定义了一个名为 MyService 的 Bean,它依赖 MyDao。我们使用 @Configuration 注解来定义配置类,并使用 @Bean 注解来定义 Bean。在 myService() 方法中,我们使用构造函数注入 MyDao。

可以看出,即使没有 Spring Boot Starter,使用 Spring 基础 API 来创建 Bean 比较容易,但还是需要创建相关的配置类。

2 约定大于配置

Spring Boot 基于“约定大于配置”(Convention over configuration)这一理念来快速地开发、测试、运行和部署 Spring 应用,并能通过简单地与各种启动器(如 spring-boot-web-starter)结合,让应用直接以命令行的方式运行,不需再部署到独立容器中。

Spring Boot starter 构造的启动器使用起来非常方便,开发者只需要在 pom.xml 引入 starter 的依赖定义,在配置文件中编写约定的配置即可。

因此常用的开源组件都会为 Spring 的用户提供一个 spring-boot-starter 封装给开发者,让开发者非常方便集成和使用。

spring-boot-starter 实现流程如下:

01、定创建starter项目,定义 Spring 自身的依赖包和 Bean 的依赖包 ;

02、定义spring.factories 文件

在 resources 包下创建 META-INF 目录后,新建 spring.factories 文件,并在文件中定义自动加载类,文件内容是:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apache.spring.autoconfigure.MyConfiguration

spring boot 会根据文件中配置的自动化配置类来自动初始化相关的 Bean、Component 或 Service。

03、配置自动配置类

编写自动配置类,这些类将在Spring应用程序中自动配置starter。自动配置类应该有一个@Configuration注解,并且应该包含可以覆盖的默认值,以允许用户自定义配置。在自动配置类中,可以使用@ConditionalOnClass、@ConditionalOnMissingBean等条件注解,以便只有在需要的情况下才会配置 starter。

3 开源 springboot starter 学习项目



项目地址:

https://github.com/apache/rocketmq-spring

rocketmq-spring 的本质是一个 Spring Boot starter , 项目的源码设计 :

https://mp.weixin.qq.com/s/CxKmKqkMwKfVZLsf8TPKlQ


每一年,我都会给自己制定读书计划,一定要读完两到三本技术书籍,并做好笔记。

与此同时,十年的编程时光里,我也积累了很多的电子书籍,有些书写得非常经典,分享给各位。

这些电子书 我已经打包好了 ,下载地址是:

https://mp.weixin.qq.com/s/WHK7HNyaeM2cQTpJZiTuJQ

一:Linux 书籍:

  • Linux 0.0.1 内核分析与操作系统
  • Linux 内核设计的艺术

二:Java 书籍:

  • 分布式java应用技术与实践 (分布式启蒙书)
  • 大型网站系统与Java中间件实战 (中间件启蒙书)
  • Alibaba Sentine 流控
  • nacos 配置中心
  • 重构
  • Netty in Action

三:数据结构:

  • Java数据结构和算法
  • 编程珠玑
  • 算法导论
  • leetcode go 算法书

四:数据库:

  • MySQL技术内幕
  • 数据库系统概念

如何理解 Spring Boot 中的 Starter ?的更多相关文章

  1. 【Java面试】如何理解Spring Boot中的Starter?

    一个工作了3年的Java程序员,遇到一个Spring Boot的问题. 他对这个问题有一些了解,但是回答得不是很好,希望参考我的高手回答. 这个问题是:"如何理解Spring Boot中的S ...

  2. 徒手撸一个 Spring Boot 中的 Starter ,解密自动化配置黑魔法!

    我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...

  3. Spring Boot2 系列教程(六)自定义 Spring Boot 中的 starter

    我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...

  4. 你如何理解 Spring Boot 中的 Starters?

    Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包.如你想使用 Spring JPA 访问数据库,只 ...

  5. Spring Boot中如何自定义starter?

    Spring Boot starter 我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的.品达通用权限系统就是基于Sp ...

  6. Spring Boot中Starter是什么

    比如我们要在Spring Boot中引入Web MVC的支持时,我们通常会引入这个模块spring-boot-starter-web,而这个模块如果解压包出来会发现里面什么都没有,只定义了一些POM依 ...

  7. Spring Boot中使用RabbitMQ

    很久没有写Spring Boot的内容了,正好最近在写Spring Cloud Bus的内容,因为内容会有一些相关性,所以先补一篇关于AMQP的整合. Message Broker与AMQP简介 Me ...

  8. 56. spring boot中使用@Async实现异步调用【从零开始学Spring Boot】

    什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执 ...

  9. 46. Spring Boot中使用AOP统一处理Web请求日志

    在之前一系列的文章中都是提供了全部的代码,在之后的文章中就提供核心的代码进行讲解.有什么问题大家可以给我留言或者加我QQ,进行咨询. AOP为Aspect Oriented Programming的缩 ...

  10. 【面试普通人VS高手系列】Spring Boot中自动装配机制的原理

    最近一个粉丝说,他面试了4个公司,有三个公司问他:"Spring Boot 中自动装配机制的原理" 他回答了,感觉没回答错误,但是怎么就没给offer呢? 对于这个问题,看看普通人 ...

随机推荐

  1. 函数XLOOKUP

    这个公式非OFFICE 365用户需要选中执行范围后 按Ctrl+Shift+Enter三键 (因为不支持公式溢出) XLOOKUP函数的基本结构是: =XLOOKUP(lookup_value,lo ...

  2. [极客大挑战 2019]Upload 1

    进入可以看到,这时一道文件上传题目 直接上传test.php 提示Not image不是图片,可能是MIME绕过,尝试抓包修改Content-Type 提示Not php,猜测可能是检测后缀名不能是p ...

  3. Vue模板语法 && 数据绑定

    模板语法 Vue模板语法包括两大类 插值语法 功能:用于解析标签体内容. 写法:{{xxx}},xxx是js表达式,可以直接读取倒data中所有区域. 指令语法 功能:用于解析标签(包括:标签属性.标 ...

  4. IDEA-日志管理神器

    Grep Console-插件的好处就在于能使控制台输出日志时,可以直接修改插件中定义好的规则,也可以根据自己定义的规则,输出不同的颜色.这样就可以将错误信息标记成显眼的颜色,方便查看,提高bug寻找 ...

  5. 接入HMS Core应用内支付服务过程中一些常见问题总结

    华为HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档. 往期文章:常 ...

  6. 罗技GHUB怎么写入板载内存

    本文以自用罗技MX518复刻版鼠标作为例子,让大家怎么学会把logitech G HUB的设置写入鼠标板载内存,并且一键切换各组板载设置. 首先点击最下方的启用,让软件设置鼠标各项设定 启用软件的设定 ...

  7. 逍遥自在学C语言 | 第一个C语言程序 九层之台起于垒土

    一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.C语言简介 C语言是一种高级语言,运行效率仅次于汇编,支持跨平 ...

  8. 一个.Net简单、易用的配置文件操作库

    在我们日常项目开发中,操作INI/CFG配置文件,往往会通过调用WinAPI来实现,WinAPI接口参数只支持字符串,而我们项目中,往往数据类型是多种多样的,在保存和获取配置值,我们就要进行类型的转换 ...

  9. pandas安装1

    Python 官方标准发行版并没有自带 Pandas 库,因此需要另行安装.除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而来,并有针对性的提前安装 ...

  10. [Linux]RabbitMQ - 解决Error: unable to connect to node rabbit@localhost: nodedown

    1 问题 环境: CentOS7.8.2003 (x86 / 64bit) 版本: RabbitMQ 3.6.15 (Erlang 19.3) 安装方式: 二进制源码压缩安装 2 解决思路 2.1 思 ...