spring源码-autoware注解实现及解决依赖处理过程

704 阅读2分钟

1、依赖注入的方式

www.iteye.com/blog/jinnia…

2、autoware注解实现原理

blog.csdn.net/qq_44837912…

3、spring resolveDependency 解决依赖 源码解读

blog.csdn.net/finalcola/a…

上面三篇文章覆盖了我对依赖注入的理解,

第一篇文章主要涉及的是spring依赖注入的api,使我们可以全面的了解spring依赖注的方式,从而促使我们对源码中涉及内容的理解。

// @todo

此篇文章中描述的是通常的注入方式,还会有一些特殊的注入方式,后面再脑图中说明之后,粘贴在这里


第二篇文章 主要是spring启动时触发bean实例化的过程,来谈autoware注解的实现,里面会谈及createBean方法,在spring refresh中是实例化非延迟加载的bean,而在beanFactory.getBean时,同样也会调用createBean,来获取懒加载的bean。主要涉及AutowiredAnnotationBeanPostProcessor中的两个方法postProcessMergedBeanDefinition 和 postProcessPropertyValues

postProcessMergedBeanDefinition()方法,@Autowired注解正是通过这个方法实现注入类型的预解析,将需要依赖注入的属性信息封装到InjectionMetadata类中,InjectionMetadata类中包含了哪些需要注入的元素及元素要注入到哪个目标类中。

postProcessPropertyValues方法,通过 metadata.inject(bean, beanName, pvs)代码的执行会进入inject方法中,在这里完成依赖的注入

AutowiredAnnotationBeanPostProcessor中不仅仅可以处理@autowire注解还支持@value和@inject注解,我们可以看AutowiredAnnotationBeanPostProcessor的构造方法。根据add的顺序,来判断注入属性的注解

扩展:

针对注解的解析,不仅仅有AutowiredAnnotationBeanPostProcessor注解,而且也会有RequiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor等来解析注入注解依赖。这三个类会实现 PriorityOrdered接口,从而实现他们的有序性

CommonAnnotationBeanPostProcessor里面会存在一些通用注解的实现,实现原理基本和AutowiredAnnotationBeanPostProcessor类似,不仅如此,还在气基础之后,增加了@PostConstruct初始化注解 和 @PreDestroy销毁注解的实现


在metadata.inject(bean, beanName, pvs)注入的过程中,逐渐深入,会看到beanFactory.resolveDependency,通过此方法,来解决依赖问题,而涉及的细节源码就在第三篇文章中