构造器注入

发布于:2022-11-29 ⋅ 阅读:(126) ⋅ 点赞:(0)

构造器注入也就是构造方法注入,学习之前,还是先准备下环境:

  • 创建一个Maven项目

  • pom.xml添加依赖

  • resources下添加spring的配置文件

这些步骤和前面的都一致,大家可以快速的拷贝即可,最终项目的结构如下:

(1)项目中添加BookDao、BookDaoImpl、UserDao、UserDaoImpl、BookService和BookServiceImpl类

 (2)resources下提供spring的配置文件

 (3)编写AppForDIConstructor运行类,加载Spring的IOC容器,并从中获取对应的bean对象

构造器注入引用数据类型

步骤1:删除setter方法并提供构造方法

在BookServiceImpl类中将bookDao的setter方法删除掉,并添加带有bookDao参数的构造方法

步骤2:配置文件中进行配置构造方式注入

在applicationContext.xml中配置

 说明:

标签<constructor-arg>中

  • name属性对应的值为构造函数中方法形参的参数名,必须要保持一致。

  • ref属性指向的是spring的IOC容器中其他bean对象。

步骤3:运行程序

运行AppForDIConstructor类,查看结果,说明bookDao已经成功注入。

构造器注入多个引用数据类型

步骤1:提供多个属性的构造函数

在BookServiceImpl声明userDao并提供多个参数的构造函数

步骤2:配置文件中配置多参数注入

在applicationContext.xml中配置注入

 说明:这两个<contructor-arg>的配置顺序可以任意

步骤3:运行程序

运行AppForDIConstructor类,查看结果,说明userDao已经成功注入。

构造器注入多个简单数据类型

步骤1:添加多个简单属性并提供构造方法

修改BookDaoImpl类,添加构造方法

步骤2:配置完成多个属性构造器注入

在applicationContext.xml中进行注入配置

 说明:这两个<contructor-arg>的配置顺序可以任意

步骤3:运行程序

运行AppForDIConstructor类,查看结果

 上面已经完成了构造函数注入的基本使用,但是会存在一些问题:当构造函数中方法的参数名发生变化后,配置文件中的name属性也需要跟着变

 在解决这个问题之前,需要提前说明的是,这个参数名发生变化的情况并不多,所以上面的还是比较主流的配置方式,下面介绍的,大家都以了解为主。

方式一:删除name属性,添加type属性,按照类型注入

  • 这种方式可以解决构造函数形参名发生变化带来的耦合问题

  • 但是如果构造方法参数中有类型相同的参数,这种方式就不太好实现了

方式二:删除type属性,添加index属性,按照索引下标注入,下标从0开始

  • 这种方式可以解决参数类型重复问题

  • 但是如果构造方法参数顺序发生变化后,这种方式又带来了耦合问题

本文含有隐藏内容,请 开通VIP 后查看