spring源码分析笔记(5) 一些零碎的理解

spring源码分析笔记(5) 一些零碎的理解

写博客是因为之前本地的笔记老是容易丢失,所以现在抽空把能找到的搬运到博客上,也是为了日后便于查看。个人理解,很可能有错误,有看到的就抱着批判的态度来看

理解一

加了@Configuration注解的,就setAttribute(“configurationClass”,“full”),为全配置类;

没加@Configuration,不是接口,加了@Component,@ComponentScan,@Import,@ImportResource任意一种的,或者内部有@Bean的,就setAttribute(“configurationClass”,“lite”)

理解二

动态代理:jdk和cglib,从文件中读取类文件,再进行解析

jdk:
jdk动态代理要求目标类实现一个接口,然后在代理类中用set或者construct方法注入目标类属性,并对目标类的方法进行修改和增强。(这就要求jdk动态代理目标类必须是实现某个接口,jdk动态代理是代理对象)

cglib:
cblib动态代理的原理是代理类继承目标类,并重写目标类的方法,从而实现对目标类方法的修改和增强,对目标类没有要求,所有类都可以被代理。(cdlib是对类代理,不需要new对象)

理解三

总结:spring的循环依赖,不支持原型,不支持构造方法注入的bean。

个人理解:(应该是错误的,抽空再修改,先放在这里)
如果构造方法注入bean,使用构造方法创建bean的时候,参数中的bean还没有,此时还没有走到getBean()方法,所以构造方法中的参数bean无法获取,导致无法创建当前bean。
所以应该使用没被循环引用的构造方法创建对象,然后在populateBean方法中再注入属性,此方法内部可以调用getBean方法,可以完成循环依赖。
可以在构造方法上加@Autowried,推断构造的时候就会推断出这个构造,就可以强制使用这个构造方法来创建bean了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值