@SpringBootApplication
基于 springboot3.2 和 springframework6.1.4
@SpringBootApplication的三大功能
@SpringBootApplication
是 Spring Boot 提供的一个方便的组合注解,用于简化 Spring Boot 应用程序的配置和启动。它combines了以下三个注解的功能:
-
@Configuration
:- 标识该类是一个配置类,可以包含 Bean 定义的方法。
- 它是 Spring 框架的核心注解,用于定义配置类和 Bean 的创建。
-
@EnableAutoConfiguration
:- 启用 Spring Boot 的自动配置机制。
- Spring Boot 会根据类路径中的依赖和定义的 Bean 来自动配置应用程序的各个方面,如数据库连接、MVC 配置等。
- 自动配置的目的是减少手动配置的工作量,提供开箱即用的功能。
-
@ComponentScan
:- 启用组件扫描,自动检测和注册 Spring 组件。
- 默认情况下,它会扫描当前包及其子包中的组件,如
@Component
、@Service
、@Repository
等注解标记的类。 - 通过组件扫描,Spring 可以自动发现和实例化应用程序中的组件,并将它们注册为 Bean。
除了组合这三个注解外,@SpringBootApplication
还提供了一些额外的功能和定制选项:
- 可以通过
scanBasePackages
或scanBasePackageClasses
属性来指定要扫描的包或类,覆盖默认的扫描行为。 - 可以通过
exclude
或excludeName
属性来排除特定的自动配置类或 Bean,从而定制自动配置的行为。
使用 @SpringBootApplication
注解标记主类(通常命名为 Application
或 MainApplication
)有以下好处:
- 简化配置: 通过一个注解即可启用多个 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
注解的主要作用:
-
声明配置类:
- 标记了
@Configuration
注解的类表示这是一个配置类,用于定义 Bean 和应用程序的配置。 - 配置类通常包含一个或多个使用
@Bean
注解标记的方法,这些方法用于声明和配置 Bean。 - Spring 容器会识别并处理标记了
@Configuration
的类,并根据其中的@Bean
方法创建和管理相应的 Bean。
- 标记了
-
定义 Bean:
- 在配置类中,可以使用
@Bean
注解标记方法来定义 Bean。 @Bean
注解告诉 Spring 容器该方法返回的对象应该被注册为一个 Bean,并由容器管理其生命周期。- 通过在配置类中使用
@Bean
方法,可以以编程方式创建和配置 Bean,灵活地控制 Bean 的创建过程和依赖关系。
- 在配置类中,可以使用
-
组合和模块化配置:
@Configuration
类可以相互引用和组合,以创建模块化和可重用的配置。- 一个配置类可以通过在方法上标记
@Bean
注解来引用另一个配置类中定义的 Bean。 - 通过组合多个
@Configuration
类,可以将应用程序的配置划分为不同的模块,提高配置的可读性和可维护性。
-
启用依赖注入:
- 在
@Configuration
类中,可以使用@Autowired
、@Inject
或@Resource
等注解来注入依赖。 - Spring 容器会根据这些注解自动进行依赖注入,将所需的 Bean 注入到配置类中。
- 通过依赖注入,可以轻松地组装和配置复杂的对象关系,无需手动创建和管理依赖对象。
- 在
-
支持条件化配置:
@Configuration
类可以与条件化注解(如@Conditional
)结合使用,以根据特定条件有条件地创建和配置 Bean。- 通过使用条件化注解,可以根据运行时环境、类路径上的依赖项或自定义条件来动态地启用或禁用配置类或 Bean 的创建。
-
集成测试支持:
@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