体验过hello world程序后,可以感觉到SpringBoot的强大之处,在正式学习SpringBoot为什么这么厉害前,首先需要掌握一些SpringBoot中的基本概念,打开官方文档,进入Using Spring Boot章节:
image.png

1.需要用到的jar包版本是如何确定的

在hello world程序中,我们引入了web功能,而该功能会需要很多的jar包
image.png
虽然我们没有明确的指定依赖包的版本,但是SpringBoot却可以引入相关的依赖,其原理是SpringBoot会为它每个版本设置默认的兼容依赖包的版本,它会在spring-boot-dependencies的pom中定义好所有需要用到的jar包版本,因此我们无需手动指定,并且在升级SpringBoot时会将默认包的版本统一升级。如果需要也可以手动指定覆盖默认的版本
image.png

2.Starters

对于每个功能,SpringBoot都将其需要用的代码和配置封装为了Starter,它默认的命名规则为:Spring官方命名spring-boot-starter-
其中的
就代表了各种启动器,比如hello world中使用到的web全名为spring-boot-starter-web。官方推荐第三方的Starter命名为*-spring-boot-starter。具体可以引用哪些Starter,每个Starter的含义是什么,可以参考Starters章节中的列表。

image.png

3.默认的结构

如果我们什么都不修改的情况下想使用SpringBoot提供的强大功能,那么就必须满足SpringBoot要求的代码结构。SpringBoot默认会扫描包含main函数的类下及其子包下的所有类,并将它们添加到容器中。以下是官网提供的典型结构
com
+- example
+- myapplication
+- Application.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
其中被@SpringBootApplication标注的类称为主类,SpringBoot提供的自动配置功能依赖于此注解才能生效

4.自动配置

@SpringBootApplication注解由以下注解组成

  1. @SpringBootConfiguration
  2. @EnableAutoConfiguration
  3. @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
  4. @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
  5. public @interface SpringBootApplication {
  6. // @SpringBootConfiguration
  7. @Configuration
  8. public @interface SpringBootConfiguration {

其中@Configuration是Spring用来代替xml文件的注解,被此注解标注的类称为配置类,其作用和使用xml进行配置的效果完全一样。而SpringBoot提供的自动配置功能是由@EnableAutoConfiguration注解提供的。@ComponentScan可以定义SpringBoot将会扫描并注册到容器中的组件所在的包,我们可以通过指定此注解的方式替换SpringBoot提供的默认扫描规则。