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