Spring框架:XML配置与依赖注入详解
"本文档介绍了如何使用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配置提供了强大而灵活的方式来管理对象的创建和它们之间的依赖关系。通过这种方式,开发者可以专注于业务逻辑,而不是对象的创建和管理,从而提高代码的可维护性和可测试性。
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/a1fa05644e3b4290a39d7f2f65b3d420_qq_41656809.jpg!1)
- 粉丝: 3
- 资源: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)