深入理解 Spring Boot:核心知识与约定大于配置原则

深入理解 Spring Boot:核心知识与约定大于配置原则

简单说一下为什么要有 Spring Boot?

因为 Spring 的缺点。

虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的(需要大量 XML 配置)

为了减少配置文件,简化开发 Spring,所以 Spring Boot 诞生了。

具体演变如下图所示:

深入理解 Spring Boot:核心知识与约定大于配置原则_第1张图片

一般说 Spring 框架指的都是 Spring Framework

说下 Spring Boot 的主要优点

  1. 开发基于 Spring 的应用程序很容易
  2. Spring Boot 项目所需的开发或工程时间明显减少,通常会提高整体生产力。
  3. Spring Boot 不需要编写大量样板代码、XML 配置和注释
  4. Spring 引导应用程序可以很容易地与 Spring 生态系统集成,如 Spring JDBC、Spring ORM、Spring Data、Spring Security 等。
  5. Spring Boot 遵循“固执己见的默认配置”,以减少开发工作 (默认配置可以修改)。
  6. Spring Boot 应用程序提供嵌入式 HTTP 服务器,如 Tomcat 和Jetty,可以轻松地开发和测试 web 应用程序。 (这点很赞!普通运行 Java 程序的方式就能运行基于Spring Boot web 项目,省事很多)
  7. Spring Boot 提供命令行接口(CLI)工具,用于开发和测试 Spring Boot 应用程序,如 Java 或 Groovy。
  8. Spring Boot 提供了多种插件,可以使用内置工具(如 Maven 和 Gradle)开发和测试 Spring Boot 应用程序。

什么是 Spring Boot Starters?

Spring Boot Starters 是 Spring Boot 提供的一组依赖项,用于快速启动常见的应用程序功能。

简单来说,就是一系列依赖关系的集合。

例如,如果想要快速启动一个 Spring Boot Web 应用程序,只需在项目中引入 spring-boot-starter-web 这个依赖即可。

Spring Boot 支持哪些内嵌 Servlet 容器?

有三个:

Name Servlet Version
Tomcat 9.0(默认容器) 4.0
Jetty 9.4 3.1
Undertow 2.0 4.0

Spring boot常用注解有哪些?

Spring Boot 中常用的注解有:

  1. @SpringBootApplication:该注解用于标注 Spring Boot 应用程序主类,表示该类是一个 Spring Boot 应用程序的入口点,可以看作是 @Configuration@ComponentScan@EnableAutoConfiguration 注解的集合。

  2. @Controller:该注解用于标注控制器类,表示该类是 Spring MVC 控制器,处理请求并返回响应。

  3. @RestController:该注解是 @Controller 注解的变体,表示该类是 RESTful API 的控制器类,处理请求并返回 JSON 格式的响应。

  4. @RequestMapping:该注解用于将 URL 请求映射到处理器方法上,可以通过 value 属性指定 URL 地址,通过 method 属性指定请求方法,还可以通过 params 属性和 headers 属性指定请求参数和请求头。

  5. @Autowired:该注解用于自动装配 Spring 容器中的 Bean 对象,可以用于字段、构造方法和 Set 方法上。

  6. @Component:该注解用于标注一个类为 Spring Bean,Spring 会自动扫描这个注解,并将该类注册到 Spring 容器中。

  7. @Bean:该注解用于标注一个方法,表示该方法返回一个 Bean 对象,该对象将被注册到 Spring 容器中。

  8. @Service:该注解用于标注一个服务类,表示该类提供业务逻辑服务,通常与 @Component 注解一起使用。

  9. @Repository:该注解用于标注 DAO 类,表示该类提供对数据库的访问操作,通常与 @Component 注解一起使用。

  10. @Value:该注解用于注入配置文件中的属性值,可以用于字段、构造方法和 Set 方法上。

  11. @Profile:该注解用于指定 Bean 对象所属的环境,可以根据不同的环境来创建不同的 Bean 对象。

  12. @Conditional:该注解可以根据条件来决定是否创建 Bean 对象,可以与 @Profile 注解一起使用,用于根据不同的环境来创建不同的 Bean 对象。

  13. @Configuration:该注解用于标注配置类,表示该类是 Spring 配置类,可以包含 Bean 的定义和配置信息。

  14. @ComponentScan:该注解用于指定要扫描的包或类,以及要扫描的 Bean 的范围。

  15. @EnableAutoConfiguration:该注解用于自动配置 Spring Boot 应用程序,根据项目中添加的依赖项自动配置 Spring 应用程序,使得开发者不需要手动配置 Spring 应用程序。

当在 Spring Boot 应用程序中使用 @ComponentScan 注解时,Spring Boot 将自动扫描注解类所在的包以及其子包下的所有类,将带有 @Component@Service@Controller@Repository 等注解的类注册为 Bean,这样这些 Bean 就可以被注入到其他类中使用了。

Spring 是如何启动的?

以下是一个启动类代码:

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

启动大概有 9 个步骤:

  1. 创建监听,并准备监听。

  2. 容器环境预配置。

  3. 打印 banner

  4. 创建 Spring 容器(IoC)。

  5. 容器刷新前置处理。

  6. 容器刷新。

  7. 容器刷新后置处理。

  8. 发出容器刷新结束通知。

  9. 调用 runner 执行启动后的相关程序。

具体解析:

  • 创建监听并准备监听,实际上做的就是从 META-INF/spring.factories 中获取关于监听器的类然后返回一个监听器列表
  • 打印 banner,就是在控制台输出一个 logo
  • 容器操作也就是实现 IoC 的步骤了

Spring Boot 的自动配置是如何实现的?

总的来说,Spring Boot 的自动配置是通过条件注解机制优先级机制来实现的.

主要包括以下几个步骤:

  1. Spring Boot 在启动时会扫描 classpath 下的 META-INF/spring.factories 文件,该文件中包含了所有自动配置类的全限定名。

  2. 根据条件注解的条件,Spring Boot 会自动判断哪些自动配置类需要生效。

    条件注解包括 @ConditionalOnClass@ConditionalOnMissingClass@ConditionalOnBean@ConditionalOnMissingBean@ConditionalOnProperty@ConditionalOnResource@ConditionalOnWebApplication 等。

  3. 如果某个自动配置类需要生效,Spring Boot 会自动将该类的配置信息添加到 Spring 上下文中,这样就可以在应用程序中使用了。

  4. 如果多个自动配置类之间存在冲突,Spring Boot 会根据优先级来决定哪个自动配置类生效。可以通过修改配置文件中的属性值来调整自动配置类的优先级。

SpringBoot 归约大于配置

在 SpringBoot 中,约定大于配置的原则是指:开发人员仅需规定应用中不符合约定的部分,而在没有规定配置的地方,采用默认配置,以力求最简配置为核心思想。总的来说,上面两条都遵循了推荐默认配置的思想。当存在特殊需求的时候,自定义配置即可。这样可以大大的减少配置工作,这就是所谓的 “约定” 。

启动类

启动类只能扫描到【当前包及其子包】下的类。

你可能感兴趣的:(常用框架,spring,boot,java)