- 创建空白Maven工程sprint-xml
-
直接点击Finish
- 在pom.xml添加Spring-context的依赖
- 在https://search.maven.org中查找org.springframework:spring-context
- 找到最新版本,拷贝Maven的依赖文本到pom.xml的dependencies下
- 在项目的Resources文件夹下创建applicationContext.xml
-
代码如下:
<?xml version="1.0"encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
- 在源代码上添加接口
-
package com.hwadee.spring.dao; public interface IEmpDAO { void create(); }
- 添加一个实现类com.hwadee.spring.EmpDAO
-
package com.hwadee.spring.dao; public class EmpDAO implements IEmpDAO { public void create() { System.out.println(this + ":员工创建成功!"); } }
- 在applicationContext.xml中添加一个bean
-
<bean id="edao"class="com.hwadee.spring.dao.EmpDAO"/>
- 在项目的根包下添加一个Application类用于测试
-
package com.hwadee.spring; import com.hwadee.spring.dao.IEmpDAO; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Application { public static void main(String[] args) { // 配置文件路径 String xmlPath = "classpath:applicationContext.xml"; // 创建 Spring 应用程序上下文对象,初始化 Spring IoC 容器 ApplicationContext ctx = new ClassPathXmlApplicationContext(xmlPath); // 获取IEmpDAO的一个实例 IEmpDAO edao = (IEmpDAO) ctx.getBean("edao"); edao.create(); } }
- 创建服务,在项目根包下创建service子包,并创建类HrService
-
package com.hwadee.spring.service; import com.hwadee.spring.dao.EmpDAO; import com.hwadee.spring.dao.IEmpDAO; public class HrService { IEmpDAO empDAO = null; public HrService(){ System.out.println(this+"初始化成功!"); } public void entry(){ System.out.println(this+"entry()方法调用开始"); empDAO.create(); System.out.println(this+"entry()方法调用结束"); } public void setEmpDAO(IEmpDAO empDAO) { System.out.println("调用setEmpDAO"+ empDAO); this.empDAO = empDAO; } }
- 在applicationContext.xml为服务类注册bean
-
<?xml version="1.0"encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="edao"class="com.hwadee.spring.dao.EmpDAO"/> <bean id="hrService"class="com.hwadee.spring.service.HrService"> <!-- 在IoC容器初始化时,Spring会自动通过setEmpDAO方法将edao对象注入到empDAO属性中--> <property name="empDAO"ref="edao"/> </bean> </beans>
- 在Applicatio类加载Bean“hrService”,并调用它的entry方法
-
package com.hwadee.spring; import com.hwadee.spring.dao.IEmpDAO; import com.hwadee.spring.service.HrService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Application { public static void main(String[] args) { // 配置文件路径 String xmlPath = "classpath:applicationContext.xml"; // 创建 Spring 应用程序上下文对象,初始化 Spring IoC 容器 ApplicationContext ctx = new ClassPathXmlApplicationContext(xmlPath); // 获取IEmpDAO的一个实例,edao为在XML中的bean的ID IEmpDAO edao = (IEmpDAO) ctx.getBean("edao"); edao.create(); HrService hrService = (HrService) ctx.getBean("hrService"); //不能这样使用 hrService.setEmpDAO(edao); hrService.entry(); } }
- 创建升级版的IEmpDao 的实现类EmpDAOExt用于取代EmpDAO,请自行添加代码
- 注意:不能修改原有代码,可以修改配置文件
最后,感谢杨勇老师的教导。