002649:方法中Autowired的多种注入方式

一、背景

  

   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可以看出是前两种之和,他先按名字再按类型

posted on 2019-01-24 20:32  ws563573095  阅读(1104)  评论(0编辑  收藏  举报

导航