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

  • 相关阅读:
    【注册验证】 控制器(添加数据+后台验证)
    AJAX 简介
    我的博客生涯
    windows xp sp3 下载地址
    get、set、add、remove → (字段、属性)+(委托、事件)
    ArcObjects整体介绍
    委托
    对字符串的处理的又一个强大的工具,正则表达式
    对象序列化存在的原因
    关于文件操作的几个类
  • 原文地址:https://www.cnblogs.com/warrior4236/p/13224101.html
Copyright © 2011-2022 走看看