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中的方法,反射注入依赖的值。

  • 相关阅读:
    Linux BFS简介
    汇编语言学习——第二章 寄存器(CPU工作原理)
    _WSAStartup@8,该符号在函数 _main 中被引用
    javascript中处理引号编码"
    tornado+ansible+twisted+mongodb操作和维护系统开发自己主动(一个)
    ORA-00600: internal error code, arguments: [4194], [53], [41], [], [], [], [], []
    【leetcode】Valid Palindrome
    开源 自由 java CMS
    创建分和生日比较数组
    有关动态多维数组的一个问题
  • 原文地址:https://www.cnblogs.com/warrior4236/p/13224101.html
Copyright © 2011-2022 走看看