大家用过spring的肯定都用过AutoWired注解,但是你想过自动注入的原理吗,这次就来说下自动注入是怎么实现的。在之前的spring的ioc容器启动过程中,我们都知道ioc容器的启动是从AbstractApplicationContext的refresh方法开始的,在ioc容器启动时会初始化加载的BeanPostProcessor,那么BeanPostProcessor是什么呢?BeanPostProcessor就是在bean初始化时操作的后置处理器,那么这和自动注入有什么关系呢?这就要从我们要说的AutowiredAnnotationBeanPostProcessor说起了。先来看下AutowiredAnnotationBeanPostProcessor的类的结构
AutowiredAnnotationBeanPostProcessor实现了BeanPostProcessor接口,当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有@Autowired 注解时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。先来看下buildAutowiringMetadata方法