spring5源码解读3springIOC实例化时对重要注解的@Autowired包装

编程

但是还有一个关键的步骤没有解读,就是注入之前是不是先收集注解比如:@Autowired ,@Resource,@PostConstruct,@PerDestory等

就是上一章第10步在

AbstractAutowrieCapableBeanFactory.java中 搜集装配注解方法  applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);

@Autowired 大概流程原理: 1.spring IOC 在实例化对象的时候,先实例化完对象

                                                 2.反射获取类对象,循环把类对象单个的注解信息封装到InjectedElement对象中

                                                 3.包装@Autowired的信息对象 InjectedElement 注解信息到InjectionMetadata中,可以是方法和属性

                                                 3.包装好之后就是populateBean()的注入方法调用了

@Resource 注解的包装

第 1 步 进入 AbstractAutowrieCapableBeanFactory.java 类中 applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName); 方法

第 2 步 先装配@Resource 注解 进入  CommonAnnotationBeanPostProcessor.java 的 postProcessMergedBeanDefinition()方法

第 3 步 博主只关注@Resource 这个标签,其他两个方法标签就不赘述了,原理差不多

            进入@Resource 的装配方法

第 4  步 进入@Resource 注解可以声明在方法和引用类型的属性上,从源码中可以看出

的构建方法中 buildResourceMetadata(clazz)

 把注解信息封装到InjectedElemet对象中

@Autowired 注解的包装

第 1 步 AbstractAutowrieCapableBeanFactory.java 类中 applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName); 方法

第 2 步 先装配@Autowired 注解 进入  CommonAnnotationBeanPostProcessor.java 的 postProcessMergedBeanDefinition()方法

第 3 步 博主只关注@Autowired 这个标签

            进入@Autowired 的装配方法

第 4  步 进入@Autowired注解可以声明在方法和引用类型的属性上,从源码中可以看出

的构建方法中 buildResourceMetadata(clazz)

 把注解信息封装到InjectedElemet对象中 跟@Resource 大同小异这里就跳过。

 

封装完注解信息之后就是上一章节的  第  14 步  populateBean()方法 的注入了

下一章节将讲解spring ICO 循环依赖

以上是 spring5源码解读3springIOC实例化时对重要注解的@Autowired包装 的全部内容, 来源链接: utcz.com/z/515916.html

回到顶部