02 springBoot常用注解?

vvEcho 2024-01-20 14:08:36
Categories: Tags:

@SpringBootApplication spring启动类上的注解(实际是由三个注解组成:@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan)

@EnableAutoConfiguration 自动配置类
@SpringBootConfiguration spring配置类
@CompentScan 扫描注解

@Bean bean注解
@ConfigurationProperties 配置文件
@EnableConfigurationProperties 配置文件
@Controller 控制器注解
@Service 服务注解
@Repository 持久化注解
@ImportResource 将资源导入容器

@Autowired 自动注入 ,先按类型找 如果找到多个就报错;如果加了@Qualifier 会先按类型找,如果多个再按名称找
@Resource 先按名称找,找不到再按类型找

Autowired 和Resource的区别

@Autowired 是 Spring 提供的依赖注入注解,默认按照 类型(byType) 注入,如果存在多个 Bean,需要配合 @Qualifier 指定名称。
@Resource 是 JSR-250 规范中的注解,默认按照 名称(byName) 注入,如果找不到再按照类型匹配。
另外 @Autowired 支持 required=false,并且可以用于 构造器注入,而 @Resource 不支持

@Autowired 支持list map optional类型的注入,而resource不支持

@Autowired 是怎么实现依赖注入的?底层流程是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Spring启动

注册 AutowiredAnnotationBeanPostProcessor

创建Bean

doCreateBean()

populateBean() ← 依赖注入

postProcessProperties()

扫描 @Autowired

resolveDependency()

BeanFactory 找依赖

Reflection 反射注入

总结
Autowired 的底层实现依赖于AutowiredAnnotationBeanPostProcessor。
Spring 在启动时会注册这个 BeanPostProcessor,在 Bean 创建过程中进入 populateBean() 阶段时,会调用 postProcessProperties() 扫描 Bean 中的 @Autowired 字段或方法。
然后通过 BeanFactory.resolveDependency() 根据类型解析依赖,从 IoC 容器中找到对应 Bean,最后通过反射将 Bean 注入到目标对象中