zoukankan      html  css  js  c++  java
  • spring源码分析——依赖注入(Resource注解注入以及 @Value注入)

      接上一节看一下Resource注解的注入,@Resource注解的注入主要依赖于CommonAnnotationBeanPostProcessor对象,这个埋点的过程与@Autowired类似,

    包括BeanDefinition的注册、对象的实例化、搜集类上的注解信息、拦截getBean实例化对象。

    一:@Resource注解分析

    1:准备工作

     运行结果:

    2:搜集注解信息

     

     

     搜集完注解信息后,封装到InjectionMetadata对象上,缓存到injectionMetadataCache集合中

     类上的注解信息搜集完成后,看一下拦截方法: populateBean方法

    这里有个getResourceToInject方法,获取依赖的bean对象:

     

    Resource注解基本和Autowired注解类似,就是拦截后,获取依赖的bean的流程有少许差异。

    二:@Value注解分析

    1:准备工作,加一个level字段,在该属性上加注解@Value信息

    配置信息properties 

     运行结果,注入成功

    2:源码分析,@Value注解使用的是AutowiredAnnotationBeanPostProcessor类

    先看一下搜集注解信息

    AutowiredAnnotationBeanPostProcessor类主要搜集@Autowired和@Value注解的元数据信息

     在来看一下populateBean中的拦截设置属性的方法:

    从缓存中取出注解,然后注入

     

     

     

     将value值返回,执行inject这个动作,@Value注解注入完成。

    总结:Resource注解是jdk提供的,它的实现主要依赖CommonAnnotationBeanPostProcessor,@Value注解是spring框架提供

    和Autowired注解一样,是依赖于AutowiredAnnotationBeanPostProcessor,流程基本相同,都会注册、实例化BeanPostProcessor对象,

    在实例化对象完成后,设置属性值之前polulateBean之前,会搜集类上的注解元数据信息,然后在polulalteBean中拦截,执行

    BeanPostProcessor中的方法,反射注入依赖的值。

  • 相关阅读:
    selenium笔记
    gbase笔记
    oracle向gbase数据迁移须知
    字符串表达式的计算
    Struts2的安装
    JSP+MySQL中文乱码
    HTML:<input type="text">文本框不可编辑的方式
    HTML中使用<input>添加的按钮打开一个链接
    AS3.0:给图片添加滤镜模糊与斜角效果
    SQLServer 2008以上误操作数据库恢复方法—日志尾部备份
  • 原文地址:https://www.cnblogs.com/warrior4236/p/13224101.html
Copyright © 2011-2022 走看看