![名师讲坛:Spring实战开发(Redis+SpringDataJPA+SpringMVC+SpringSecurity)](https://wfqqreader-1252317822.image.myqcloud.com/cover/156/29977156/b_29977156.jpg)
2.3 IoC开发实现
严格来讲,IoC并不能称为是一种技术,而是一种设计思想。IoC产生的主要原因是为了限制使用关键字new,因此采用统一的容器来进行对象管理。IoC设计中,重点关注的是组件的依赖性、配置以及生命周期。通过使用IoC,能够降低组件之间的耦合度,提高类的重用性,更有利于测试,整个产品或系统也更便于集成和配置。
1.【mldnspring项目】创建一个新的子模块mldnspring-base,如图2-8所示。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer350.jpg?sign=1738847749-ZjKssubJx5NnIwb1HQOto8daVCBM8zRL-0-0d54986853b660f1abd217da27524df7)
图2-8 创建新的子模块
2.【mldnspring-base项目】修改pom.xml配置文件,引入Spring依赖库。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer348.jpg?sign=1738847749-JCyfxxHeDkLeJINxUBwjGMHa8WwLWVuK-0-e23fd63bec8150ce8c2d441efb3341d9)
3.【mldnspring-base项目】建立IMessage接口。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer349.jpg?sign=1738847749-Zeud0q8uaXmdl9MQWvfA8npg2nIZJwMN-0-639ab496b6f4becee53f89f136da80b3)
4.【mldnspring-base项目】建立IMessage接口实现子类MessageImpl。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer379.jpg?sign=1738847749-SNGqQKVCuk5QhUTWOcS585A4CB9j8IhT-0-d0074b3bef9bbf944a04e1a1519ed7a7)
5.【mldnspring-base项目】Spring主要依赖配置文件进行Bean管理,所以需要创建一个资源目录src/main/resources,并将其提升为源代码目录,如图2-9所示。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer380.jpg?sign=1738847749-WKofzCR7q2sSE7mkQRYQpefqdw695nRU-0-2d656e2d8577c3037d1a3621687a0cbe)
图2-9 建立src/main/resources源代码目录
6.【mldnspring-base项目】在src/main/resources目录中创建spring/spring-base.xml配置文件。可通过STS提供的组件创建,如图2-10所示,而后选择好要保存的路径,如图2-11所示。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer381.jpg?sign=1738847749-u62baovOVzbqwbwc5OCy0WBkkLBkmitT-0-d773feda057612bda12b204eaf7153f0)
图2-10 创建Spring配置文件
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer382.jpg?sign=1738847749-gtEppEZWjug5zmcc9IWUkBrIHr1uXGuT-0-5d9eac2d5f5c237833d0726940495100)
图2-11 选择配置文件保存目录
创建Spring配置文件时,最重要的一步是要选择配置的命名空间。不同的命名空间代表着不同的配置项,由于本例只需要实现Spring的核心功能,所以这里导入beans命名空间,如图2-12所示。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer383.jpg?sign=1738847749-Hk6G7p21yz4q7pwLRxienXENRrob22of-0-223cfe0117498b6383f2b0c26e9f26c0)
图2-12 选择配置文件命名空间
7.【mldnspring-base项目】修改src/main/resources/spring/spring-base.xml配置文件,追加Bean配置项。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer409.jpg?sign=1738847749-0mSaYTLG7ygedsz3kpho2CNAk7DCfaW9-0-12a4df3cdbf5c758b8ca579e965a6d37)
本程序在Spring配置文件中使用<bean>元素定义了一个被Spring管理的Java对象,该元素属性如下。
id="messageImpl":Bean的名称,Spring容器启动后可以根据此名称获取Spring管理对象。此名称不允许重复。
class="cn.mldn.mldnspring.service.impl.MessageImpl":Bean对应的完整类型,Spring容器启动时自动进行指定类对象的反射实例化处理。
8.【mldnspring-base项目】要想启用配置文件,需要先启动Spring容器,然后才可以对配置的Bean进行统一管理。编写一个程序启动类。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer410.jpg?sign=1738847749-j2cQE93QIcMwhfEtIw29nxTUwBECOqW1-0-bc1e1251815c13bd10c86552cd379c5d)
本程序启动了Spring容器,而后可以通过ApplicationContext接口对象,根据配置文件中定义的Bean名称获取IMessage接口子类对象实例。IMessage接口对象实例由Spring统一管理,开发者不必操心该实例化对象的管理。
提示:关于ApplicationContext接口。
ApplicationContext接口描述的是整个Spring容器。该接口有许多子类,读者可通过Spring官方网站的API文档获取相应信息。如图2-13所示列举了几个常用的ApplicantionContext子类,通过类名称可以发现,可以使用ClassPath加载,也可以使用文件加载,或者通过Web加载。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer437.jpg?sign=1738847749-CUxiMCxse7v5QxUdtRYC3AWijy2uJ8XY-0-aa7b7ebfbc2ea681bae4be8d1838cf55)
图2-13 ApplicationContext
实际开发中,用户并不需要关注ApplicationContext接口,因为Spring容器会随着Web容器自动启动。这里列出,是为了便于读者理解和学习。