Spring框架:XML配置与依赖注入详解
需积分: 5 151 浏览量
更新于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配置提供了强大而灵活的方式来管理对象的创建和它们之间的依赖关系。通过这种方式,开发者可以专注于业务逻辑,而不是对象的创建和管理,从而提高代码的可维护性和可测试性。
174 浏览量
120 浏览量
点击了解资源详情
2024-03-14 上传
装死小能手
- 粉丝: 3
- 资源: 1
最新资源
- 保险行业培训资料:胡萝卜、鸡蛋、咖啡豆
- pts后处理
- lms2021.1
- neo4j-community-3.5.13-windows.zip
- Computational_Physics:3月优先注意事项
- Gymzzy-Demo:演示Gymzzy角站点托管
- 电子功用-带滤波功能的轮椅电机
- MyPasswords:个人密码管理器-开源
- partners:Qiskit合作伙伴计划的主要存储库
- 保险行业培训资料:目标市场增员
- 随机生成70多万的网名数据
- codecon2015samples:AsyncAwait的TypeScript a Babel在CodeCon 2015之前的示例
- 电子功用-圆柱形锂离子电池化成分容设备
- sphinx-html-multi-versions:允许在 Sphinx 生成的文档中切换产品版本的简单模板和包含脚本
- 搏斗
- neo4j-community-3.5.13-unix.tar.gz