Spring生成Bean过程中的一些细节点


一、实例化前就通过扩展节点将对象实例化出来,会导致什么结果?

  • 1、该实力对象中需要依赖注入的属性全部为空,spring不会对该实例对象进行依赖注入;
  • 2、该对象会跳过实例化后的一系列步骤,直接到达初始化后的阶段。也就意味着某些初始化前、初始化过程的的步骤是不能执行的。

二、spring实例化对象的方式有哪几种?@Bean使用的是哪一种?

spring实例化对象的方式大方向上有两种,一种是通过实现Supplier接口来获取实例对象,另一种是通过factoryMethod创建实例对象;
@Bean使用的是factoryMethod来创建实例对象的;
需要注意的是如果@Bean修饰的方法是static修饰,那么spring不会创建工厂对象来使用工厂方法创建实例,而是会在当前类的内部生成一个实例化对象的方法来创建当前对象

三、spring推断构造方法的执行逻辑是怎么样的?

  • 如果该对象中只有一个构造方法(无论是有参构造还是无参构造),那么spring会默认使用该方法来进行对象的实例化创建。
  • 如果有一个无参构造和多个有参数构造,且所有构造方法上都没有加上@Autowired注解,那么spring会默认使用无参数构造方法来进行实例化对象。
  • 如果有多个有参数构造,但是没有无参构造。会判断是否存在一个有参构造方法上含有@Autowired注解,有的话就会使用含有该注解的方法来实例化对象,没有的话则抛出异常。
  • 如果有多个有参数构造和一个无参数构造,每个有参构造方法上都有@Autowired(required = false)的注解,那么spring会选取参数最多的那个,且每个参数都能从spring容器中找到的构造方法来创建对象。
  • 如果有多个有参数构造和一个无参数构造,每个有参构造方法上都有@Autowired(required = false)的注解,且有两个构造方法的参数个数相同且是最多,那么spring会对这些参数进行评分,评分越低的表明越符合,spring就会用这个评分最低的来进行对象的创建。如果评分一样则会跑出异常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缘丶沐逸尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值