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注解的主要内容,如果未能解决你的问题,请参考以下文章