介绍
在这个项目中,你将学习如何使用控制反转(IoC)设计模式和 Spring 框架实现一个简单的中英消息切换系统。
👀 预览
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] 正在运行 com.labex.TestGreeting
你好, Labex
Hello, Labex
[INFO] 测试运行: 1, 失败: 0, 错误: 0, 跳过: 0, 耗时: 1.056 秒 - 在 com.labex.TestGreeting 中
[INFO]
[INFO] 结果:
[INFO]
[INFO] 测试运行: 1, 失败: 0, 错误: 0, 跳过: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] 构建成功
[INFO] ------------------------------------------------------------------------
[INFO] 总耗时: 11.295 秒
[INFO] 完成时间: 2024-05-10T12:05:55Z
[INFO] ------------------------------------------------------------------------
🎯 任务
在这个项目中,你将学习:
- 如何创建一个带有抽象
doMessage()方法的IMessage接口 - 如何在两个具体类
MessageCN和MessageEN中实现IMessage接口 - 如何使用
applicationContext.xml文件配置消息 bean - 如何在
TestGreeting类中测试消息切换功能
🏆 成果
完成这个项目后,你将能够:
- 使用 IoC 设计模式将消息功能的实现与主应用程序解耦
- 使用 Spring 框架配置和管理消息 bean
- 编写单元测试来验证消息切换系统的功能
创建 IMessage 接口
在这一步中,你将创建 IMessage 接口,它包含一个名为 doMessage() 的无返回值抽象方法。
- 在
com.labex包中创建一个名为IMessage.java的新 Java 文件。 - 在文件中,使用以下代码定义
IMessage接口:
package com.labex;
// 消息功能的接口
public interface IMessage {
// 显示消息的方法签名
void doMessage();
}
这个接口为任何想要实现消息功能的类定义了基本结构。doMessage() 方法是一个抽象方法,将由具体的消息类来实现。
创建 MessageCN 类
在这一步中,你将创建 MessageCN 类,它实现了 IMessage 接口。这个类将有一个 msg 属性并提供 get/set 方法。它还将重写 doMessage() 方法以输出字符串“你好,Labex”。
- 在
com.labex包中创建一个名为MessageCN.java的新 Java 文件。 - 在文件中,使用以下代码定义
MessageCN类:
package com.labex;
// 用于中文消息的 IMessage 接口实现
public class MessageCN implements IMessage {
private String msg; // 存储消息的变量
// 获取消息的 getter 方法
public String getMsg() {
return msg;
}
// 设置消息的 setter 方法
public void setMsg(String msg) {
this.msg = msg;
}
// 实现 IMessage 接口中的 doMessage 方法
@Override
public void doMessage() {
// 打印中文问候消息
System.out.println("你好," + msg);
}
}
MessageCN 类实现了 IMessage 接口,并为 doMessage() 方法提供了实现,该方法打印中文问候消息。
创建 MessageEN 类
在这一步中,你将创建 MessageEN 类,它同样实现了 IMessage 接口。这个类将拥有一个 msg 属性并提供 get/set 方法。它会重写 doMessage() 方法以输出字符串“hello,Labex”。
- 在
com.labex包中创建一个名为MessageEN.java的新 Java 文件。 - 在该文件内,使用以下代码定义
MessageEN类:
package com.labex;
// 用于英文消息的 IMessage 接口实现
public class MessageEN implements IMessage {
private String msg; // 用于存储消息的变量
// 获取消息的 getter 方法
public String getMsg() {
return msg;
}
// 设置消息的 setter 方法
public void setMsg(String msg) {
this.msg = msg;
}
// 实现 IMessage 接口中的 doMessage 方法
@Override
public void doMessage() {
// 打印英文问候消息
System.out.println("Hello, " + msg);
}
}
MessageEN 类实现了 IMessage 接口,并为 doMessage() 方法提供了实现,该方法打印英文问候消息。
创建 applicationContext.xml 配置文件
在这一步中,你将创建 applicationContext.xml 配置文件,用于配置上述创建的 JavaBeans,并在配置中传递 msg 属性信息。
- 在
src/main/resources目录中创建一个名为applicationContext.xml的新文件。 - 在文件中,添加以下 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">
<!-- 中文消息 bean 的配置 -->
<bean id="messageCN" class="com.labex.MessageCN">
<!-- 将 MessageCN bean 的'msg' 属性设置为 "Labex" -->
<property name="msg" value="Labex"/>
</bean>
<!-- 英文消息 bean 的配置 -->
<bean id="messageEN" class="com.labex.MessageEN">
<!-- 将 MessageEN bean 的'msg' 属性设置为 "Labex" -->
<property name="msg" value="Labex"/>
</bean>
</beans>
此配置文件设置了 MessageCN 和 MessageEN 两个 bean,并使用值 "Labex" 初始化它们的 msg 属性。
创建 TestGreeting 类
在这一步中,你将创建 TestGreeting 类,并添加一个名为 testGreeting() 的测试方法来执行测试操作。
- 在
com.labex包中创建一个名为TestGreeting.java的新 Java 文件。 - 在文件中,使用以下代码定义
TestGreeting类:
package com.labex;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestGreeting {
@Test
public void testGreeting() {
// 从 XML 配置文件加载 Spring 应用上下文
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从上下文中获取消息 bean
IMessage messageCN = (IMessage) context.getBean("messageCN"); // 中文消息 bean
IMessage messageEN = (IMessage) context.getBean("messageEN"); // 英文消息 bean
// 对中文消息 bean 调用 'doMessage' 方法
messageCN.doMessage();
// 对英文消息 bean 调用 'doMessage' 方法
messageEN.doMessage();
context.close();
}
}
TestGreeting 类从 applicationContext.xml 文件加载 Spring 应用上下文,获取 MessageCN 和 MessageEN bean,然后调用它们的 doMessage() 方法来测试功能。
现在,你已经完成了通过 IoC 创建中英信息切换项目的所有步骤。你现在可以运行测试并查看预期输出。
- 运行测试:
cd ~/project/SpringGreeting/
mvn test
测试应该通过,你应该会看到以下输出:
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.labex.TestGreeting
你好, Labex
Hello, Labex
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.056 s - in com.labex.TestGreeting
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.295 s
[INFO] Finished at: 2024-05-10T12:05:55Z
[INFO] ------------------------------------------------------------------------
总结
恭喜!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



