首页 > 其他分享 >一篇文章读懂@SpringBootApplication

一篇文章读懂@SpringBootApplication

时间:2024-03-17 13:29:45浏览次数:32  
标签:一篇 Spring SpringBootApplication 配置 读懂 Bean 注解 Configuration

@SpringBootApplication

基于 springboot3.2 和 springframework6.1.4

@SpringBootApplication的三大功能

@SpringBootApplication 是 Spring Boot 提供的一个方便的组合注解,用于简化 Spring Boot 应用程序的配置和启动。它combines了以下三个注解的功能:

  1. @Configuration:

    • 标识该类是一个配置类,可以包含 Bean 定义的方法。
    • 它是 Spring 框架的核心注解,用于定义配置类和 Bean 的创建。
  2. @EnableAutoConfiguration:

    • 启用 Spring Boot 的自动配置机制。
    • Spring Boot 会根据类路径中的依赖和定义的 Bean 来自动配置应用程序的各个方面,如数据库连接、MVC 配置等。
    • 自动配置的目的是减少手动配置的工作量,提供开箱即用的功能。
  3. @ComponentScan:

    • 启用组件扫描,自动检测和注册 Spring 组件。
    • 默认情况下,它会扫描当前包及其子包中的组件,如 @Component@Service@Repository 等注解标记的类。
    • 通过组件扫描,Spring 可以自动发现和实例化应用程序中的组件,并将它们注册为 Bean。

除了组合这三个注解外,@SpringBootApplication 还提供了一些额外的功能和定制选项:

  • 可以通过 scanBasePackagesscanBasePackageClasses 属性来指定要扫描的包或类,覆盖默认的扫描行为。
  • 可以通过 excludeexcludeName 属性来排除特定的自动配置类或 Bean,从而定制自动配置的行为。

使用 @SpringBootApplication 注解标记主类(通常命名为 ApplicationMainApplication)有以下好处:

  • 简化配置: 通过一个注解即可启用多个 Spring Boot 功能,减少了显式配置的需求。
  • 自动配置: Spring Boot 会根据类路径中的依赖自动配置各种功能,如嵌入式服务器、数据库连接池等,提供开箱即用的体验。
  • 组件扫描: 自动发现和注册应用程序中的 Spring 组件,无需手动配置。
  • 易于启动: 使用 @SpringBootApplication 标记的主类可以直接运行,无需额外的配置或部署步骤。

总之,@SpringBootApplication 注解简化了 Spring Boot 应用程序的配置和启动过程,提供了自动配置和组件扫描等便利功能,使得开发者可以快速创建和运行 Spring Boot 应用程序。


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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
    @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
   
	//..............
}

1. @Configuration

@Configuration 是 Spring Framework 提供的一个重要注解,用于定义配置类并声明 Bean。它是 Spring 基于 Java 的配置方式的核心组件。

以下是 @Configuration 注解的主要作用:

  1. 声明配置类:

    • 标记了 @Configuration 注解的类表示这是一个配置类,用于定义 Bean 和应用程序的配置。
    • 配置类通常包含一个或多个使用 @Bean 注解标记的方法,这些方法用于声明和配置 Bean。
    • Spring 容器会识别并处理标记了 @Configuration 的类,并根据其中的 @Bean 方法创建和管理相应的 Bean。
  2. 定义 Bean:

    • 在配置类中,可以使用 @Bean 注解标记方法来定义 Bean。
    • @Bean 注解告诉 Spring 容器该方法返回的对象应该被注册为一个 Bean,并由容器管理其生命周期。
    • 通过在配置类中使用 @Bean 方法,可以以编程方式创建和配置 Bean,灵活地控制 Bean 的创建过程和依赖关系。
  3. 组合和模块化配置:

    • @Configuration 类可以相互引用和组合,以创建模块化和可重用的配置。
    • 一个配置类可以通过在方法上标记 @Bean 注解来引用另一个配置类中定义的 Bean。
    • 通过组合多个 @Configuration 类,可以将应用程序的配置划分为不同的模块,提高配置的可读性和可维护性。
  4. 启用依赖注入:

    • @Configuration 类中,可以使用 @Autowired@Inject@Resource 等注解来注入依赖。
    • Spring 容器会根据这些注解自动进行依赖注入,将所需的 Bean 注入到配置类中。
    • 通过依赖注入,可以轻松地组装和配置复杂的对象关系,无需手动创建和管理依赖对象。
  5. 支持条件化配置:

    • @Configuration 类可以与条件化注解(如 @Conditional)结合使用,以根据特定条件有条件地创建和配置 Bean。
    • 通过使用条件化注解,可以根据运行时环境、类路径上的依赖项或自定义条件来动态地启用或禁用配置类或 Bean 的创建。
  6. 集成测试支持:

    • @Configuration 类可以在集成测试中使用,以配置测试所需的 Bean 和依赖项。
    • 通过在测试类中使用 @ContextConfiguration 注解并指定 @Configuration 类,可以加载测试所需的应用程序上下文和 Bean。
    • 这种方式使得编写集成测试变得更加简单和可控,无需依赖外部的配置文件。

总之,@Configuration 注解是 Spring 基于 Java 的配置方式的核心组件。它允许开发者使用 Java 类来定义和配置 Bean,提供了更加灵活和强大的配置能力。通过使用 @Configuration 类,可以模块化和组合配置,启用依赖注入,并支持条件化配置和集成测试。

使用 @Configuration 注解,开发者可以以编程方式控制应用程序的配置和组装,提高了配置的可读性、可维护性和灵活性。它是 Spring 基于 Java 的配置方式的基石,与其他注解(如 @Bean@Autowired 等)配合使用,构成了 Spring
应用程序配置的完整生态系统。

public class ConfigurationClassPostProcessor {
   

	public void processConfigBeanDefinitions(BeanDefinitionRegistry registry) {
   
		//获取所有的bean names
		String[] candidateNames = registry.getBeanDefinitionNames();
		//遍历candidateNames,找出所有被标注@Configuration配置类
		if (ConfigurationClassUtils.checkConfigurationClassCandidate(beanDef, this.metadataReaderFactory)) {
   
			configCandidates.add(new BeanDefinitionHolder(beanDef, beanName));
		}
		//创建配置类解析器ConfigurationClassParser
		ConfigurationClassParser parser = new ConfigurationClassParser(this.metadataReaderFactory, this.problemReporter, this.environment, this.resourceLoader, this.componentScanBeanNameGenerator, registry);
		//解析配置类
		parser.parse(candidates);
		//获取解析后的配置类ConfigurationClass集合
		Set<ConfigurationClass> configClasses = new LinkedHashSet<>(parser.getConfigurationClasses())

标签:一篇,Spring,SpringBootApplication,配置,读懂,Bean,注解,Configuration
From: https://blog.csdn.net/weixin_36441033/article/details/136621043

相关文章

  • 一篇文章带你掌握Flex 布局:语法、实例
    目录前言语法一、Flex布局是什么?二、基本概念三、容器的属性(应用在父元素上)1.**`flex-direction`**:2.**`flex-wrap`**:3.**`flex-flow`**:4.**`justify-content`**:5.**`align-items`**:6.**`align-content`**:四、项目的属性(应用在子元素上)1.**`order`**:2.**`flex-......
  • Win11复现 PointNet ++ 分类任务 || 三维点云深度学习第一篇
    ​Windows11Github上复现PointNet++Classification任务下载代码和安装依赖环境安装git知乎教程Gitclone源码地址:PointNetGithub点击Code复制HTTPS到目标目录shift-右键GitBashHere输入GitClone<url>​​​​​​安装nodejsNode.js—Down......
  • Activiti7 工作流看这一篇就够了(一、入门案例)
    目录一、Activiti7概述二、Activiti7的入门案例1.创建SpringBoot项目2.获取ProcessEngine2.1默认的方式......
  • 如何使用ChatGPT快速写出一篇完美论文?
    原文链接:如何使用ChatGPT快速写出一篇完美论文?https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247597847&idx=2&sn=eaad4282191a165c08a78fbf5c6a47aa&chksm=fa823ef0cdf5b7e619433e27b1249a3d57384dc052276bfb86c681e2069e0566eda910a00b53&token=1544438010&a......
  • 2024最新整理Python入门教程(超详细),从零基础入门到精通,看完这一篇就够了
    前言本文罗列了Python零基础入门到精通的详细教程,内容均以知识目录的形式展开。01.python由来与发展介绍02.项目开发流程【文末有惊喜福利......
  • Spring Schedule定时任务看这一篇就够了
    SpringSchedule 是指Spring框架提供的定时任务调度功能。SpringSchedule允许开发者在应用程序中便捷地创建和管理定时任务,比如按固定频率执行某些操作,或者按照cron表达式设定复杂的调度规则。SpringSchedule功能的依赖直接或间接地包含在 spring-boot-starter 家族中的相......
  • 都2024年了还在写JQuery?一篇文章带你快速入门Vue.js
    Vue快速入门笔记本文主要介绍vue.js的核心知识点,看完本篇文章只能算是简单入门了解Vue,后续还需要读者在项目中不断练习研究。一、前端核心分析1.1、概述Soc原则:关注点分离原则Vue的核心库只关注视图层,方便与第三方库或既有项目整合。HTML+CSS+JS:视图:给用户......
  • 一图读懂工业互联网平台
    工业互联网是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态,是第四次工业革命的重要基石。 工业互联网包含了网络、平台、数据、安全四大体系,它既是工业数字化、网络化、智能化转型的基础设施,也是互联网、大数据、人工智能与实体经济深度融合的应用......
  • 一文读懂Databend的开放表格式引擎
    Databend近期发布ApacheIceberg和DeltaTable两类表引擎,以提供对两种目前最受欢迎的开放表格式的支持,满足基于不同技术栈的现代数据湖方案面临的高级分析需求。采用基于Databend/DatabendCloud的一站式解决方案,可以在不启用额外的Spark/Databricks服务的......
  • 第一篇博客
    第一篇博客目录目录第一篇博客目录基本信息自我评估展望未来3.13.2未来职业规划3.3对软件工程实践的理解和期待4学习路线5建立代码仓库基本信息这篇博客是软件工程作业班级链接作业要求作业要求作业的目标介绍自己以及规划未来其他参考文献构建之法社区......