当前位置: 首页 > news >正文

@SpringBootApplication 注解

什么是 @SpringBootApplication

@SpringBootApplication 是 Spring Boot 提供的一个核心注解,它是一个组合注解,用于简化 Spring Boot 应用程序的配置。这个注解通常标注在主类上,用于标识一个 Spring Boot 应用的入口。通过这个注解,开发者可以更方便地启动和配置 Spring Boot 应用程序。

@SpringBootApplication 的组成

@SpringBootApplication 其实是一个复合注解,它包含了以下三个注解:

  1. @SpringBootConfiguration
  2. @EnableAutoConfiguration
  3. @ComponentScan

让我们分别看看这三个注解的作用。

1. @SpringBootConfiguration

@SpringBootConfiguration 是一个特定于 Spring Boot 的注解,实际上是 Spring Framework 中 @Configuration 注解的一个特化版本。它标识一个类为配置类,并允许在该类中定义 @Bean 方法以注册 Bean 到 Spring 容器中。

@SpringBootConfiguration
public class MyAppConfiguration {@Beanpublic MyBean myBean() {return new MyBean();}
}
2. @EnableAutoConfiguration

@EnableAutoConfiguration 是 Spring Boot 的关键注解之一。它启用 Spring Boot 的自动配置机制,尝试根据类路径中的依赖项和应用程序中定义的 Bean 自动配置 Spring 应用程序。它大大减少了开发者需要显式配置的代码量。

@EnableAutoConfiguration
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}
3. @ComponentScan

@ComponentScan 注解告诉 Spring 要扫描指定的包及其子包,以查找带有 @Component@Service@Repository 等注解的类,并将它们自动注册为 Spring 应用程序上下文中的 Bean。

@ComponentScan(basePackages = "com.example.myapp")
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}
@SpringBootApplication 的使用

结合这三个注解,@SpringBootApplication 简化了配置,使得应用程序更易于开发和维护。下面是一个典型的 Spring Boot 应用程序入口类的示例:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}

在这个例子中,@SpringBootApplication 注解等同于同时使用 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan。这使得开发者可以专注于业务逻辑,而无需为基础配置费心。

深入理解 @EnableAutoConfiguration

@EnableAutoConfiguration 注解是 Spring Boot 自动配置的核心。它会根据应用程序类路径中的依赖项,自动配置相关的 Bean。例如,如果类路径中存在 spring-boot-starter-web 依赖,那么自动配置将为应用程序配置一个嵌入式的 Tomcat 服务器。

自动配置通过 META-INF/spring.factories 文件中定义的 EnableAutoConfiguration 条目来实现:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration

通过这种方式,Spring Boot 会加载并应用适当的配置类,使开发者无需手动配置这些组件。

自定义自动配置

虽然自动配置非常强大,但有时开发者需要自定义某些配置。可以通过以下几种方式实现:

  1. 排除特定的自动配置类

    可以使用 exclude 属性排除特定的自动配置类:

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
    }
    
  2. 自定义 Bean

    如果需要自定义某个自动配置的 Bean,可以在配置类中定义相应的 @Bean 方法。例如,自定义 DataSource

    @SpringBootApplication
    public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}@Beanpublic DataSource dataSource() {return new HikariDataSource();}
    }
    
总结

@SpringBootApplication 注解是 Spring Boot 提供的一个强大工具,它结合了多个核心注解,简化了应用程序的配置和启动过程。通过自动配置和组件扫描,开发者可以快速构建和部署生产级别的应用程序。而且,Spring Boot 还允许开发者通过多种方式自定义配置,以满足特定需求。

相关文章:

  • linux:命令执行过程【图表】
  • linux 安装redis 遇到问题解决方案
  • 面试真题 | ARM体系架构基础知识
  • (四)stm32之通信协议
  • 补码是什么意思_补码的性质_补码反码原码的转换
  • c++【入门】计算(a+b)*c的值
  • LLM大模型应用中的安全对齐的简单理解
  • 什么是数据同步服务RSYNC?
  • 快速排序算法Python实现
  • 【人工智能】-- 迁移学习
  • 包管理器-npm、yarn、cnpm、pnpm的比较
  • JDK安装详细教程(以JDK17为例)
  • c++将utf8转gb2312
  • Tomcat组件概念和请求流程
  • 【Redis】初识 Redis
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Angular4 模板式表单用法以及验证
  • C++类中的特殊成员函数
  • centos安装java运行环境jdk+tomcat
  • iOS | NSProxy
  • js学习笔记
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MySQL QA
  • PermissionScope Swift4 兼容问题
  • React Transition Group -- Transition 组件
  • socket.io+express实现聊天室的思考(三)
  • Spring Cloud Feign的两种使用姿势
  • Windows Containers 大冒险: 容器网络
  • 闭包,sync使用细节
  • 不上全站https的网站你们就等着被恶心死吧
  • 复习Javascript专题(四):js中的深浅拷贝
  • 技术:超级实用的电脑小技巧
  • 配置 PM2 实现代码自动发布
  • 前端技术周刊 2019-01-14:客户端存储
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 数据结构java版之冒泡排序及优化
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 原生Ajax
  • hi-nginx-1.3.4编译安装
  • ​马来语翻译中文去哪比较好?
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #includecmath
  • (02)vite环境变量配置
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (排序详解之 堆排序)
  • (转) 深度模型优化性能 调参
  • (转载)Google Chrome调试JS
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net 简单实现MD5
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)