重新理解spring IOC

一直以来自认为对于spring有一些自己的理解,但最近在写一个开源的缓存框架。开发starter时遇到一些瓶颈,查资料过程中发现一篇不错的文章,觉得讲的挺有道理,这里写点笔记记录一下。

依赖注入dependency injection

一直认为的spring依赖注入方式有3种,其实官方写的只有两种:

DI exists in two major variants: Constructor-based dependency injection and Setter-based dependency injection.

  1. 构造器注入✅
  2. set注入✅
  3. 注解❌

依赖注入是一个装配的过程,使用的注入方式只有构造器或者set以及他们的变种;而@autowired注入是通过spring的后置处理器使用反射进行处理的。

 

自动注入(DI) != 自动装配

之所以会把依赖注入DI理解错,是因为把依赖注入和自动装配认为是一件事了。其实不然,DI只是装配过程中方式,而装配又分为自动装配和手动装配。自动装配有4种模式:

  1. no(不自动装配,0)
  2. byName(通过name自动装配,1)
  3. byType(通过类型自动装配,2)
  4. constructor(通过构造器自动装配,3)

与之对应的是我们XML <Bean>配置中的autowire属性

之所以我们把@autowired认为是自动装配,主要是因为这个注解会先按照类型注入,有一个符合条件的注入,有多个再按照名字去找。他的行为就很像byType和byName

其次,当我们使用@component + @autowired注解时,所以行为上已经很大程度上精简了bean的依赖配置,但是看源码其实他的自动注入模型值是0.并不是自动注入。

而且即使我们的类被@component标记时,使用了全参构造器,他的注入类型依然是0,而不是constructor。只是我认为spring提供给了一个默认的行为,让使用注解+构造器时行为等同于自动装配。

大大降低配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值