一、背景
1、今天查看代码时看到有个这样的写法,具体功能就是把RouteContextHandler的实现类注入到这个入参中。
2、说实在的真是第一次见。
3、一直以为@Autowired只能放到字段和普通方法上。
二、具体分析
1、查看了下@Autowired的定义他除了上述两种,还可以用在构造构造器,方法参数和其他注解上
2、顺便看了下@Qualifier,它和@Autowired的作用域差不多,也可以用在参数上。
3、@Resource就不能了,只能用在类、方法和属性上。
4、Controller,Service,Component的使用范围就比较单一了。
三、实现
1、@Autowired注解是由AutowiredAnnotationBeanPostProcessor类中的processInjection来处理的。
2、先收集类中@Autowired和@Value修饰的属性和方法参数封装在Metadata中(org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.buildAutowiringMetadata(Class<?>))
3、然后根据名称和类型充spring容器中获取值。
4、设置会对象中
四、其他
1、@Autowired,@Qualifier,@Resource的区别
a、Autowired根据类型注入对象。
b、Qualifier根据名字注入对象。
c、Resource可以看出是前两种之和,他先按名字再按类型