Spring框架:XML配置与依赖注入详解
需积分: 5 45 浏览量
更新于2024-08-05
收藏 40KB MD 举报
"本文档介绍了如何使用XML配置创建Spring容器,并展示了通过容器获取对象的两种方式,强调了Spring默认使用无参构造器创建对象。接着,讨论了Spring的依赖注入(DI),包括基于XML的DI,如设值注入,以及应用类型的赋值。"
在Spring框架中,创建容器通常是通过读取XML配置文件来实现的。例如,我们可以在一个名为`beans.xml`的文件中定义Bean的配置,然后使用`ClassPathXmlApplicationContext`来加载这个配置文件并创建Spring容器。如以下代码所示:
```java
String config = "beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config);
```
通过Spring容器,我们可以轻松地获取到配置文件中声明的对象。有两种主要的方式获取这些对象:
1. 使用对象的ID直接获取:
```java
someService someService1 = (someService) applicationContext.getBean("someService");
someService1.doSome();
```
2. 通过类类型获取:
```java
someService someService2 = applicationContext.getBean(someService.class);
someService2.doSome();
```
Spring默认是通过无参构造函数来创建对象的。当创建容器时,它会读取XML配置文件并将所有声明的对象实例化,存入一个内部的Map中。这种方式的优点是获取对象的速度快,因为所有对象在容器初始化时就已经准备就绪。然而,它也有缺点,那就是会占用更多的内存,因为即使未立即使用,所有对象也会被预先创建。
依赖注入(DI)是Spring框架的核心特性之一,它允许我们外部化对象的依赖关系,从而使代码更加灵活和可测试。有多种方式实现DI,包括XML配置和注解。
对于基于XML的DI,最常见的形式是设值注入,即通过调用类中的setter方法来设置属性的值。在XML配置文件中,可以这样定义:
```xml
<bean id="student" class="fancx.Student">
<property name="name" value="anA"/>
<property name="age" value="25"/>
</bean>
```
在上述例子中,Spring会在创建`Student`实例时,通过`setName`和`setAge`方法分别设置`name`和`age`属性。为了使Spring能够完成属性赋值,我们的类必须提供相应的getter和setter方法。
如果属性是引用类型,如另一个Bean,我们可以通过`ref`属性指定引用的对象,例如:
```xml
<bean id="student" class="fancx.Student">
<property name="name" value="anA"/>
<property name="age" value="25"/>
<!-- 引用类型赋值 -->
<property name="school" ref="school"/>
</bean>
<bean id="school" class="fancx.School"/>
```
这样,`student` Bean的`school`属性就会被设置为`school` Bean的实例。
Spring的XML配置提供了强大而灵活的方式来管理对象的创建和它们之间的依赖关系。通过这种方式,开发者可以专注于业务逻辑,而不是对象的创建和管理,从而提高代码的可维护性和可测试性。
2019-09-16 上传
2024-03-14 上传
装死小能手
- 粉丝: 3
- 资源: 1
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器