一、概述
spring boot中的依赖反转的核心就是自动注入,也就是从ioc容器中获取bean按bytype、byname、construture等方式进行注入。
注入的方式通常来说主要分为手动注入以及自动注入
手动注入:
1.construture:构造方法注入
2.set方法注入
自动注入:
@autowired:
1.构造方法
2.普通非静态字段
3.普通方法
自动配置的开启涉及到spring boot中的一个核心注解@EnableAutoConfiguration,起底下包含一个@import子接口,将一个ImportSelector包含进来,selector从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后加载到beanFactory中。
二、@Autowired的工作流程
1.扫描bean
2.获取该bean下的候选注入点集合InjectionMeteData
2.1 null?
2.1.1通过反射遍历字段,静态?
2.1.2看有没有@Autowired接口?
2.1.3required==true?
2.1.4包装成InjectedElement装进InjectionMeteData
以同样的顺序遍历方法
3.以k-v方式存InjectionMeteData进缓存中
4.遍历InjectionMeteData中的各个候选注入点(bytype->byname)
4.1 通过beanFactory获取所有相同种类的bean
4.2 判断要注入的点是否属于集合类型
4.3 返回一个HashMap,key是字段名
4.4 size=1? 直接返回
4.5 map.get(key)即byname,看是否有相应的bean,
4.6 无相应bean:required=true?抛出异常:return;
懒,不想画流程图