Spring的@Autowired这个注解是先bytype再byname,通过源码分析可以知道,spring中的属性填充是通过populateBean这个方法完成(后期有时间补充一下spring中的属性填充流程),spring中初始化bean是不管属性,先将bean new出来,然后在调用populateBean方法的后置处理器来进行属性的填充。@Autowired的后置处理器是AutowiredAnnotationBeanPostProcessor,通过postProcessPropertyValues方法来会先根据bytype去寻找,如果找到的数量>1,则会根据byname去寻找,这个时候如果找不到,则抛出异常。