Spring-Framework-ioc-3

1前言

2基本原理

3IOC容器

4Bean

5依赖

OOP是指面向对象编程,是一种在软件工程领域里常用的开发方法,该方法能指导开发者开发出高内聚低耦合的应用软件系统。在一般情况下,一个应用软件系统常包括很多业务对象,这些业务对象为了实现业务逻辑产生了各种各样的引用关系,而引用关系是指业务对象之间发生的一对一关系、一对多关系、多对多关系,这些引用关系在OOP中被称之为依赖关系。本章节主要描述Spring-Framework技术框架提供的策略,用于解决bean之间依赖关系的相关问题。

5.1依赖注入

依赖注入是IOC的实现过程,IOC容器使用该机制绑定bean实例对象之间的引用关系。

构造函数依赖注入

构造函数是构造对象的函数,没有返回值,构造函数实现依赖注入等同于工厂静态方法实现依赖注入,其形式如下所示:

类SimpleMovieLister定义一个MovieFinder类型的变量movieFinder,由此,SimpleMovieLister与MovieFinder之间产生一对一的依赖关系

与类SimpleMovieLister名称相同的函数是构造函数,IOC容器使用该函数作为依赖注入的函数

构造函数参数依赖注入

IOC容器在实例化bean的时候,根据bean的配置元数据,使用bean的构造函数注入指定的依赖。

类ThingOne的构造函数包括两个参数,按照顺序分别是类ThingTwo、类ThingThree

在bean的配置元数据中,使用属性constructor-arg定义构造函数的参数,IOC容器在实例化的过程注入对应的依赖

类ExampleBean分别定义一个整数类型、一个字符串类型,使用构造函数参数注入对应的常量类型

在bean的配置元数据中,分别使用指定参数类型、指定参数索引顺序、指定参数名称的方式注入依赖

Setter方式依赖注入

IOC容器先使用bean的默认构造函数(无依赖参数)完成实例化,再调用setter方法将对应的依赖注入。

类SimpleMovieLister定义一个MovieFinder类型的变量movieFinder,由此,SimpleMovieLister与MovieFinder之间产生一对一的依赖关系

类SimpleMovieLister定义setter的方法是setMovieFinder,该方法注入类MovieFinder

IOC容器支持在同一个bean中同时定义构造函数依赖注入以及setter方法依赖注入,在实际的应用开发中,根据具体情况选择合适的依赖注入方法。由前面的描述可知,IOC容器支持bean配置元数据的形式包括XML、注解以及代码,这些方式的处理过程都相同,IOC容器先将配置的元数据转换为类BeanDefinition,如果用户直接使用代码实现,则先使用类PropertyEditor定义待注入的依赖,再将其注入到类BeanDefinition中。

类ExampleBean使用setter方法实现依赖注入类AnotherBean、类YetAnotherBean、常量i

定义名称为myDataSource的数据源,其中支持property标签或者p类型的命名空间

分别使用标签list, set, map, props定义集合

循环依赖

假设存在名称为A、B的bean,A依赖于B,而且B依赖A,这种情况被称为循环依赖,如果A、B是使用构造函数的方式实现依赖注入,则IOC容器会直接抛出BeanCurrentlyInCreationException异常信息。如果A、B是使用setter方法的方式实现依赖注入,则IOC容器检测到A、B之间出现循环依赖的情况下,先实例化后者B,再实例化A,然后将B注入到A中,IOC容器只负责执行依赖注入的操作,而在A、B执行业务逻辑的过程中可能会出现异常,因此,用户需要自行处理由于循环依赖而引起的业务逻辑异常。

懒初始化

为了节约系统的内存资源,IOC容器提供实例化bean的延迟策略,称之为懒初始化。

属性lazi-init指定值等于true,表示延迟实例化,在业务逻辑需要用到的时候再执行bean的实例化

(未完待续)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wangys2006

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

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

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

打赏作者

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

抵扣说明:

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

余额充值