@SpringBootApplication详解(Spring Boot启动原理)

本文来说下Spring Boot中的自动装配机制。SpringBoot最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),通过SpringBoot为我们提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。

文章目录

概述

如果我们想要使用传统意义上的 Spring 应用,那么需要配置大量的 xml 文件才可以启动,而且随着项目的越来越庞大,配置文件也会越来越繁琐,这在一定程度上也给开发者带来了困扰,于是 SpringBoot 就应运而生了。

在这里插入图片描述


什么是SpringBoot

2012 年 10 月,一个叫 Mike Youngstrom 的人在 Spring Jira 中创建了一个功能请求,要求在 Spring Framework 中支持无容器 Web 应用程序体系结构,提出了在主容器引导 Spring 容器内配置 Web 容器服务。这件事情对 SpringBoot 的诞生应该说是起到了一定的推动作用。

SpringBoot 的诞生就是为了简化 Spring 中繁琐的 XML 配置,其本质依然是 Spring 框架,使用 SpringBoot 之后可以不使用任何 XML 配置来启动一个服务,使得我们在使用微服务架构时可以更加快速地建立一个应用

SpringBoot 具有以下特点:

  • 创建独立的 Spring 应用。
  • 直接嵌入了 Tomcat、Jetty 或 Undertow(不需要部署 WAR 文件)。
  • 提供了固定的配置来简化配置。
  • 尽可能地自动配置 Spring 和第三方库。
  • 提供可用于生产的特性,如度量、运行状况检查和外部化配置。
  • 完全不需要生成代码,也不需要 XML 配置。

SpringBoot 这些特点中最重要的两条就是约定优于配置和自动装配


约定优于配置

SpringBoot 的约定由于配置主要体现在以下方面

  • maven 项目的配置文件存放在 resources 资源目录下。
  • maven 项目默认编译后的文件放于 target 目录。
  • maven 项目默认打包成 jar 格式。
  • 配置文件默认为 application.yml 或者 application.yaml 或者 application.properties。
  • 默认通过配置文件 spring.profiles.active 来激活配置。

自动装配

自动装配是什么及作用

springboot的自动装配实际上就是为了从spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给spring容器来帮我们进行管理。下面详细分析。

自动装配则是 SpringBoot 的核心,自动装配是如何实现的呢?为什么我们只要引入一个 starter 组件依赖就能实现自动装配呢,接下来就让我们一起来探讨下 SpringBoot 的自动装配机制。

相比较于传统的 Spring 应用,搭建一个 SpringBoot 应用,我们只需要引入一个注解 @SpringBootApplication,就可以成功运行。

我们就从 SpringBoot的这个注解开始入手,看看这个注解到底替我们做了什么。

@SpringBootApplication注解源码

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters =
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@SpringBootApplication是一个复合注解,用于标注Spring Boot应用的主配置类。它包含了三个核心注解:@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。其中,@SpringBootConfiguration注解表示这个类是Spring Boot的主配置类,Spring Boot应该运行这个类的main方法来启动应用。@EnableAutoConfiguration注解用于自动配置Spring Boot应用的配置信息,它会根据classpath下的依赖自动配置Spring应用的各种组件。@ComponentScan注解用于扫描指定包及其子包下的所有组件,并将它们注册到Spring容器中。通过这三个注解的组合,@SpringBootApplication实现了自动配置和组件扫描的功能,简化了Spring Boot应用的配置过程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [@SpringBootApplication详解](https://blog.csdn.net/cai_ing/article/details/108311119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [@SpringBootApplication详解(Spring Boot启动原理)](https://blog.csdn.net/qq_31960623/article/details/118183099)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [@SpringBootApplication原理分析](https://blog.csdn.net/wdw66666/article/details/107783335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值