Spring Boot启动注解的底层和@Autowired底层的实现

目录

[1. @SpringBootApplication 的底层实现](#1. @SpringBootApplication 的底层实现)

[2. @Autowired 的底层实现](#2. @Autowired 的底层实现)

总结


Spring Boot 和 Spring Framework 中的 @SpringBootApplication@Autowired 注解是 Spring 生态系统中非常重要的部分,它们分别用于简化 Spring 应用的启动过程和实现依赖注入。下面将分别探讨这两个注解的底层实现。

1. @SpringBootApplication 的底层实现

@SpringBootApplication 是一个方便的注解,它包含了 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 这三个注解的功能。

  • @SpringBootConfiguration :这个注解是 @Configuration 的一个特殊形式,用于标记当前类是一个 Spring Boot 的配置类。@Configuration 注解表明该类是一个配置类,可以使用 @Bean 注解来定义和初始化 Spring 容器中的 bean。

  • @EnableAutoConfiguration :这个注解告诉 Spring Boot 根据添加的 jar 依赖自动配置 Spring 应用。它通过 spring.factories 文件中的 EnableAutoConfiguration 入口点来查找并加载自动配置类。这些自动配置类使用 @Conditional 注解来确保只有在满足特定条件时才会被应用。

  • @ComponentScan:这个注解告诉 Spring 在包和子包中查找其他组件、配置和服务,以便自动发现和注册为 Spring 应用上下文中的 bean。

2. @Autowired 的底层实现

@Autowired 注解用于自动装配 Spring 容器中的 bean。它可以用在构造器、字段、setter 方法上,以及配置方法上。

  • 实现机制@Autowired 的实现依赖于 Spring 的依赖注入(DI)容器。当 Spring 容器启动时,它会扫描带有 @Component@Service@Repository 等注解的类,并将这些类的实例作为 bean 注册到容器中。然后,当 Spring 容器处理带有 @Autowired 注解的字段、构造器或方法时,它会查找与注解的字段、参数类型相匹配的 bean,并将这些 bean 注入到相应的位置。

  • 查找过程 :如果 Spring 容器中存在多个与 @Autowired 注解字段或参数类型相匹配的 bean,它会根据类型匹配和名称匹配(如果指定了 @Qualifier 注解)来确定要注入的 bean。如果没有找到匹配的 bean,Spring 容器会抛出异常,除非使用了 @Autowired(required = false),此时会忽略该字段或参数,不进行注入。

  • 基于 Java 的配置 :除了注解方式,Spring 还支持基于 Java 的配置方式,通过 @Bean 注解在配置类中定义 bean,并通过 @Autowired 注解自动装配这些 bean。

总结

@SpringBootApplication@Autowired 是 Spring Boot 和 Spring Framework 中非常重要的注解,它们分别用于简化 Spring 应用的启动过程和实现依赖注入。@SpringBootApplication 通过组合多个注解来提供自动配置和组件扫描的功能,而 @Autowired 则通过 Spring 的依赖注入机制来自动装配 bean。这两个注解的底层实现都依赖于 Spring 的容器和自动配置机制。

相关推荐
S***26756 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)6 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL6 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
V***u4537 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿7 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9197 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08297 小时前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡7 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
一 乐7 小时前
应急知识学习|基于springboot+vue的应急知识学习系统(源码+数据库+文档)
数据库·vue.js·spring boot
@大迁世界8 小时前
相信我兄弟:Cloudflare Rust 的 .unwrap() 方法在 330 多个数据中心引发了恐慌
开发语言·后端·rust