Spring源码之 @lazy注解

Posted chuliang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring源码之 @lazy注解相关的知识,希望对你有一定的参考价值。

出现场景:

注解在属性上和@Autowired一起

构造器中参数前面

其他情况不讨论,只讨论这两种,按照之前关于自动注入博客,为属性和构造器参数赋值,用的是AutowiredAnnotationBeanPostProcessor的determineCandidateConstructors和postProcessPropertyValues方法,根据classType找到工厂中所有符合条件的beanName,

根据beanDefinition确定哪一个bean,实例化调用的是this.beanFactory.resolveDependency,在doResolveDependency之前,会进行多个lazy方式的处理,有Optional、ObjectFactory、ObjectProvider、Provider以及@lazy注解。

顺便提一句其中Provider类型在ribbon注入Eureka的serverList用得到

处理lazy注解是看descriptor中调用这个bean的方法(构造器方法或者set方法)有没有lazy注解,有的话,生成一个动态代理,在真正用的时候再调用doResolveDependency方法(这么麻烦的吗?)

 

以上是关于Spring源码之 @lazy注解的主要内容,如果未能解决你的问题,请参考以下文章

Spring源码分析

Spring注解之@Lazy注解

Spring IoC 源码分析 (基于注解) 之 包扫描

Spring源码分析之 常见底层核心注解

spring源码分析之spring注解@Aspect是如何工作的?

Spring IoC 源码分析 (基于注解) 之 包扫描