Spring源码之 @lazy注解

出现场景:

1、注解在属性上和@Autowired一起

2、构造方法中参数前面

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

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

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

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

 

转载于:https://www.cnblogs.com/chuliang/p/11548602.html

你可能感兴趣的:(java)