Spring Boot注解总结篇:Bean装配

1,220 阅读3分钟

前言

学习一门新技术的时候,总是如盲人摸象一般,只能了解到局部,然后一点一点拼凑出全景。尤其是现在Spring Boot等约定优于配置的思想。对于新手来说,创建的项目直接能运行固然很爽,但是想动手写点什么的时候一下就懵了,所谓约定,究竟约定了什么?想要将Spring运用自如,很多内容终究还是要过一遍的。

正文

经过十篇文章的努力,我们对Spring注解的学习整理也完成了第一阶段。别的文章往往一开始都会介绍@SpringBootApplication,而我们仅仅只让它在第十篇文章内露了一下面。看似我们的文章组织的没有章法,实际上也是无可奈何,平级的知识之间的关系就如同网状,起步阶段总是感觉备受困扰,我已经按照我认为最容易理解的顺序组织内容。如果看的不太懂,不妨先去找找DEMO,上手敲一敲。

回到我们的文章上来,第一阶段的主题是Bean装配,想要将Bean注册到Spring IoC容器。一般有两种思路:
①使用@Configuration标注在类上, 正如其名字所表达的那样,在这个配置类中,我们可以在返回Bean的方法上标注@Bean
②直接在类上标注@Component,那么这个类就会被注册到容器中。

Bean被注册到了容器中,但我们并不能直接使用,否则那岂不是成了全局变量,开了历史的倒车?
@Autowired能够将Bean注入到成员变量中,它实际上调用了setter方法,所以需要注入的字段,需要声明public的setter方法。

自动注入时类型必须匹配,必须是对应的类或者子类。当对应的类只有一个时自然不必烦恼。当有多个实例时则根据名字匹配。但为了自动匹配上而强迫自己按照Bean的名字命名字段对象无异于削足适履,还好,@Qualifier@Primary能解决我们的问题。Spring会根据@Qualifier内传入的名字去匹配相应的Bean;而@Primary更加适用于Bean之间有优先级顺序的情况,像主从数据库就是一个很好的例子。

之后,我们需要对Bean有着更加细粒度的控制。比如@Scope来决定Bean的作用域。@Lazy来决定Bean是否懒加载。@Profile让我们根据条件决定Bean是否装配。

最后,是十分重要常常被提到,却往往沦为@SpringBootApplication的背景板的@ComponentScan,它开启了包扫描,是我们Bean被装配到容器中的最大功臣。

链接

Spring Boot注解全攻略(一):@Bean
Spring Boot注解全攻略(二):@Configuration
Spring Boot注解全攻略(三):@Component
Spring Boot注解全攻略(四):@Autowired
Spring Boot注解全攻略(五):@Qualifier
Spring Boot注解全攻略(六):@Primary
Spring Boot注解全攻略(七):@Scope
Spring Boot注解全攻略(八):@Lazy
Spring Boot注解全攻略(九):@Profile
Spring Boot注解全攻略(十):@ComponentScan