Spring-boot框架使用手册之一——Spring Ioc(基于注解)

本文是Spring Boot技术手册的一部分,深入探讨了Spring Ioc(控制反转)概念,包括Spring IoC容器的原理、BeanFactory和ApplicationContext接口、基于注解的装配和管理Bean。文中详细阐述了Bean的生命周期、依赖注入以及不同作用域的Bean,并介绍了如何通过条件装配和延迟加载策略优化Bean管理。
摘要由CSDN通过智能技术生成

快递100 是专业的快递物流互联网平台,为数以亿计的用户提供快递物流的查、寄件服务。快递100 的各种服务已经稳定高效的运行了多年,为中国的快递物流行业的快速发展做出了很大的贡献,这一切都离不开背后默默贡献的程序猿们。

从第一个独立站点上线至今,快递100 已经走过了10个年头,10年沧海桑田,10年经历了一次又一次的技术、架构升级。近年来,由于spring-boot、spring-cloud技术的兴起,快递100 技术团队也开始对后端服务进行重构,基于spring-boot、spring-cloud技术,对原有的系统进行微服务化改造。在改造的前期,由于许多开发人员对spring系列的技术缺少系统性的认知,所以我们编辑整理了一个spring系列技术使用的手册,帮助开发人员可以快速的上手。


目录

1. Spring IoC简介

2. IoC容器

2.1 Spring IoC容器

2.2 BeanFactory接口

2.3 ApplicationContext接口

2.4 AnnotationConfigApplicationContext

3. 装配Bean

3.1 扫描装配Bean

3.2 装配第三方Bean

3.3 根据条件装配Bean

3.4 延迟加载

3.5 Bean的注入

3.5.1 注入Bean(@Autowired注解)

3.5.2 消除歧义(@Primary注解和@Qualifier注解)

3.5.3 带参数的构造方法注入

3.6 Bean的生命周期

3.6.1 Bean的生命周期介绍

3.6.2 应用介入Bean的生命周期

3.6.3 BeanFactoryProcessor接口

3.6.4 Bean的作用域

3.6.5 装配Xml配置的Bean



1. Spring IoC简介

IoC是Inversion of Control的简称,中文意思为控制反转,Ioc理念是Spring框架的两个核心理念之一(另外一个是面向切面:Aspect Oriented Programing,AOP),Spring框架本质上是一个IoC容器编程的框架。

IoC的理念本身并不是Spring,甚至不是java语言的首创。对于传统的java编程方式,我们通常通过new关键字来创建对象,比如类A依赖于类B,我们会在类A中通过:B b = new B()这样的代码来创建一个类B的实例,如果类B是个接口或者抽象类,假如其有一个实现类C,则类A中创建B的实例的代码变为:B b = new C(),这导致了类A和类B的实现类C之间的耦合,即使实际上对于类A来说,可能并不关心B的具体实现方式。而基于IoC的编程则不是这样,IoC是通过描述来生成或者获取对象的技术,当类A依赖于类B时,只需要通过配置文件、注解等方式对依赖需求进行描述,就可以基于这个描述获取到一个类B的实例,类A无需关心类B的具体实现方式,也就解除了和类B具体实现类之间的耦合。

IoC技术基于描述来生成或者获取对象,这些对象都有Spring框架进行管理。此外,这些对象之间并不是孤立存在的,它们之间可能存在着各种依赖关系,如上面的例子中,类A的实例依赖于类B的实例,因此在创建类A的实例时,还需要将类B的实例设置到类A的属性中,这就是依赖注入,在Spring应用中,依赖注入的功能也是由框架提供的。

2. IoC容器

2.1 Spring IoC容器

如前面所述,Spring框架基于IoC理念提供了通过描述来创建或者获取对象的功能和依赖注入的功能,这些功能由IoC容器提供,而由容器创建的对象通常称为Bean,IoC容器实际上负责Bean的创建、销毁、管理、注入和它们之间的关系的维护。

Spring IoC容器的定义由一系列的接口组成,其顶级接口为BeanFactory。Spring IoC容器接口的类图如下:

2.2 BeanFactory接口

BeanFactory是Spring IoC容器的顶级接口,定义了IoC容器的主要方法。这些方法如下:

  • getBean方法:用于从IoC容器中获取一个Bean,在BeanFactory中定义了多个getBean方法的重载,可以通过Bean的名称、类型等多种方式从容器中获取到指定的Bean
  • containsBean方法:判断容器中是否包含指定名称的Bean,如果是则返回true,否则返回false
  • isSingleton方法:判断指定名称的Bean的作用域是否为singleton(单例)
  • isPrototype方法:判断指定名称的Bean的作用域是否为prototype(原型)
  • isTypeMatch方法:判断指定名称的Bean的类型是否匹配指定的类型,此方法包含两个重载方法,分别通过ResolvableType和Class类型的参数指定匹配的类型
  • getType方法:获取指定名称的Bean的类型
  • getAlias方法:获取指定名称的Bean定义的别名数组

2.3 ApplicationContext接口

BeanFactory接口中定义了IoC容器的主要方法,但基本上都是集中在获取Bean或者Bean的一些基本属性方面,总体来说功能还是比较弱的,于是在BeanFactory接口的基础上,Spring框架提供了更高级、包含更多功能的IoC容器接口:ApplicationContext。

ApplicationContext接口通过继承上级接口,进而继承了BeanFactory中定义的各个方法,并在此基础上,扩展了更多的接口,因此具有更强大的功能。BeanFactory接口和ApplicationContext接口是Spring IoC容器最重要的接口设计,因为ApplicationContext接口具有更多的功能,因此我们实际上使用的IoC容器,大多数都是ApplicationContext接口的实现类。

在BeanFactory接口的基础上,ApplicationContext接口还扩展了如下的接口:

  • MessageSource:提供消息国际化功能
  • EnvironmentCapable:环境参数可配置化功能
  • ApplicationEventPublisher:应用事件发布功能
  • ResourcePatternResolver:资源模式解析功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值