Spring装配Bean
上一篇SpringBoot依赖注入中依赖注入的例子使用的是JavaConfig显示配置的方法。
回想一下,Config
类,他显示地配置了很多的bean,每次都要自己配置不嫌麻烦?能不能省略显示配置的内容,让让Spring自动去发现类—–可以,这便是Spring自动装配。
Spring自动装配
ABC过于抽象,咱们这次换个生动的例子(《Spring实战》),我们为其取名为”音乐播放器和他的CD”。uml类图建模如下图所示:
解释一下:CompactDisc有个play()方法,Fantasy(范特西)实现了CompactDisc接口,CDplayer使用Fantasy播放音乐。代码如下:
1 | public interface CompactDisc { |
1 | public class Fantasy implements CompactDisc{ |
1 | public class CDPlayer { |
类比一下上一篇的ABC,其实是一样的模子。按照上篇的思维,即显示配置Bean,接下来我们就需要写个Config
类,然后在里面显示返回CDPlayer
,Fantasy
实例对象。你可以停下来想一想。周杰伦14张专辑都实现了CompactDisc
接口,你都需要手动写,岂不是很麻烦,时间复杂度为O(n) = =。
好在Spring支持自动配置,解放了我们的双手!那我们该怎么改呢?CompactDisc
接口不需要改动;Fantasy
只需要在类之前使用@Component
注解告诉Spring它是个组件,需要被扫描然后装入容器中,代码如下:
1 | // --------------> 改动 |
而CDPlayer
也需要添加@Component
注解。
1 | // --------------> 改动 |
@Autowired
注解相当于告诉Spring,如果容器中存在CompactDisc
的实例,那么在生成CDPlayer
Bean是,把CompactDisc
实例依赖自动装入。最后我们需要一个CDPlayerConfig
告诉Spring需要扫描哪些Component
。
1 |
|
你会发现只要在组件上方添加@Component
注解,并且使用@ComponentScan
告诉Spring哪些组件需要被装入容器,你就能省略上篇冗杂在Config
显示配置Bean。
SpringBoot简化操作
如果用过SpringBoot的同鞋可能发现,上述的两步走
- 在组件上方添加
@Component
注解 - 使用
@ComponentScan
告诉Spring哪些组件需要被装入容器
中的第二步是不需要开发人员做的,没错,SpringBoot简化了配置操作,但是不代表它没有做,它只是在幕后帮你完成了第二步。