@AutoWired是怎么起作用的?

目录

1、简要

2、Spring容器启动流程

3、AutowiredAnnotationBeanPostProcessor


1、简要

基于AnnotationConfigApplicationContext。

2、Spring容器启动流程

先简要说一下Spring容器的初始化。从AnnotationConfigApplicationContext这个类出发,创建这个类,然后往里面丢一些组件,如beanFactory,注解配置读取器,类路径扫描器等。可以理解为Spring容器就是一个管理bean的工厂,bean由容器创建销毁。Spring容器初始化之后,先扫描出要放容器的bean,将其包装成BeanDefinition对象,然后通过反射创建bean并完成赋值操作。

而被@Autowired这个注解的类、方法等怎么被创建成一个bean的呢?

在registerAnnotationConfigProcessors中会向容器注入PostProcessorAutowiredAnnotationBean后置处理器,这个是用来完成@Autowired自动注入的。下面就展开讲一下这个后置处理器。

3、AutowiredAnnotationBeanPostProcessor

 类继承关系如下:

简单整理了一个图,助于理解。

AutowiredAnnotationBeanPostProcessor中有一个set会保存该类会处理的注解。

实现了MergedBeanDefinitionPostProcessor类,通过这个方法实现注入类型的预解析。将需要依赖注入的属性信息封装到InjectionMetadata对象中。

继承了InstantiationAwareBeanPostProcessorAdapter类,设置bean的属性,为其赋值。对bean完成依赖注入就是根据InjectionMetadata对象里封装的内容进行赋值。

实现BeanFactoryAware为了拿到BeanFactory。

实现PricorityOrdered是为了标识自身的注入顺序。

 @AutoWired大概就是这样实现的啦~

参考:

​​​​​​掘金

MergedBeanDefinitionPostProcessor和@Autowired,@Value的关系_Enjoy博客-CSDN博客

阿里面试真题:Spring容器启动流程_敖丙-CSDN博客_spring容器启动流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值