Spring学习笔记_2_依赖注入/控制反转

概念

通过依赖注入,Java EE应用中的各种组件不需要以硬编码的方式进行耦合,当一个Java实例需要另一个Java实例时,系统自动提供需要的实例,无需程序显示获取。因此,依赖注入实现了组件之间的解耦。
传统是使用new 来调用,这样会导致调用者和被调用者之间的耦合性增加,对项目后期维护不利。

控制反转

在使用Spring框架后,对象的实例不再由调用者创建,而是由spring容器创建,这样控制权由程序代码转移到了spring容器,控制权发生了反转,这就是spring的控制反转
在这里插入图片描述

依赖注入

从spring容器的角度看,spring容器负责将被依赖对象赋值给调用者的成员变量,这就相当于为调用者注入了它依赖的实例,这就是spring的依赖注入。

依赖注入的类型

依赖注入的作用就是使用spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现主要有以下方式,一种是构造方法注入,另一种是属性setter方法注入。

构造方法注入

大多数情况下,我们都是通过构造方法来创建类对象,spring也可以采用反射的方式,通过使用带参数的构造方法来完成注入,每个参数代表着一个依赖,如果参数比较少还行,参数比较多时,那么这种构造方法就比较

属性setter方法注入

该方式要求Bean提供一个默认的构造方法,并为需要注入的属性提供对应的setter方法。spring先调用Bean的默认构造方法实例化Bean,然后通过反射的方式调用setter方法注入属性值。

实例

在这里插入图片描述
在这里插入图片描述
constructor-arg还有一些其他属性,index,ref,type,主要是name,value。
测试类和之前差不多
在这里插入图片描述
spring配置文件从2.0版本开始使用schema形式,使用不同的命名空间管理不同类型的配置,使配置文件更具扩展性
比如:使用p命名空间来简化属性的注入
在这里插入图片描述
前提是要有setter方法
在这里插入图片描述
在这里插入图片描述

当要注入的是一个组件时(设值注入)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
name属性的值可以通过ref属性或者value属性指定。当使用ref属性时,表示对Spring IOC 容器中某个Bean 实例的引用。这里引用了前一个< bean >元素中创建的UserDaoImpl类的实例userDao,并将该实例赋值给UserServiceImpl类中的userDao属性,从而实现了依赖关系的注入。UserSeriveImpl类的userDao属性值是通过setUserDao()方法注入的,这种注入方式称为设值注入。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了18 篇原创文章 · 获赞 18 · 访问量 1176

猜你喜欢

转载自blog.csdn.net/qq_42542609/article/details/103944406