我的processon连接
先给上我processon地址:www.processon.com/view/617cea…
整体思路
spring的自动注入其实非常简单 自动注入发生在创建bean然后为bean填充属性的时候也就是熟知的populateBean方法中 在这里会调用bean的后置处理器AutowiredAnnotationBeanPostProcessor获取bean对象中所需要注入的属性,封装成一个对象,然后通过反射为bean对象进行注入
核心类和方法
AutowiredAnnotationBeanPostProcessor类的 postProcessProperties方法 postProcessProperties方法中 findAutowiringMetadata 方法用于寻找自动注入的属性并且封装成相关对象以便后续使用,inject 方法进行正式的反射调用
源码解析
主要分析上面提到的 findAutowiringMetadata 方法和 inject 方法
自动注入的起点
寻找需要自动注入的属性 找到 buildAutowiringMetadata 方法
开始反射进行自动注入
找到 resolveDependency 方法,如果自动注入那就会去Spring容器中获取自动注入的对象,那不用想肯定也会牵扯到 getBean方法,如果没有bean就再进行创建。 找到 doResolveDependency 方法内容非常多有些我自己都不太明白,很多都是在缓存中去查找相关信息, 但我知道肯定要找getBean方法
点进去一看果然
这样其实就拿到对应的要注入的bean了
再到刚刚的 inject 方法 反射赋值
自此大差不差也算结束了
尾
以上都是本人自行阅读源码的理解,如有不正确之处还请大佬们指正,谢谢!