Spring松耦合的个人理解和代码实例
Spring松耦合的个人理解和代码实例
理解Spring的松耦合概念,那么我们先来看看一个不使用Sring的实例代码
先看一下整个测试项目案例的结构
正常方式
创建一个接口,这个接口指定车辆的行驶速度
package com.car.run;
public interface SpeedCar {
public void runSpeed();
}
1
2
3
4
5
6
7
8
现在我们指定两辆车的行驶速度:一辆F1赛车,行驶最高速度为300 km/h, 一辆客运大巴,速度为 80 km/h。
//F1赛车
package com.car.impl;
import com.car.run.SpeedCar;
public class F1Racing implements SpeedCar {
@Override
public void runSpeed() {
System.out.println("The maximum speed of the F1 is 300 km/h.");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
//客运大巴
package com.car.impl;
import com.car.run.SpeedCar;
public class PassengerBus implements SpeedCar {
@Override
public void runSpeed() {
System.out.println("The maximum speed of a passenger bus is 80 km/h.");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
按正常方式我们直接调用
package com.car.main;
import com.car.impl.PassengerBus;
import com.car.run.SpeedCar;
public class Test {
public static void main(String[] args) {
SpeedCar speedcar = new PassengerBus();
speedcar.runSpeed();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
目前来看,其实这种方法也挺简单的,无非就是new 出一个客运大巴的对象 speedcar,然后通过speedcar来输出客运大巴的最高时速。但是我们new出的对象speedcar完全依赖的是客运大巴,或者说对客运大巴的耦合度特别高,它也仅仅是指向客运大巴PassengerBus,如果我们要输出F1赛车的最高时速,那么还需要再次new出F1赛车的对象。
结果显示
通过辅助类实现
package com.car.helper;
import com.car.impl.PassengerBus;
import com.car.run.SpeedCar;
public class SpeedCarHelper {
SpeedCar speedcar;
public SpeedCarHelper(){
speedcar = new PassengerBus();
}
public void getSpeed() {
speedcar.runSpeed();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
改造我们上一个方法中主方法实现内容
package com.car.main;
import com.car.helper.SpeedCarHelper;
public class Test {
public static void main(String[] args) {
SpeedCarHelper helper = new SpeedCarHelper();
helper.getSpeed();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
那么实际上这种方法也是一种高耦合,helper依赖与辅助类,而这个辅助类又依赖与客运大巴PassengerBus。
结果显示
Spring实现
最后,我们通过Spring的依赖注入,实现生成松散的耦合。
改造辅助类
package com.car.helper;
import com.car.run.SpeedCar;
public class SpeedCarHelper {
SpeedCar speedcar;
public void setSpeedcar(SpeedCar speedcar) {
this.speedcar = speedcar;
}
public void getSpeed() {
speedcar.runSpeed();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
创建 Spring bean 的配置文件,并在这里声明所有的Java对象的依赖
<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring-Common.xml -->
<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-2.5.xsd">
<bean id="speedCarHelper" class="com.car.helper.SpeedCarHelper">
<property name="speedcar" ref="F1Racing" />
</bean>
<bean id="F1Racing" class="com.car.impl.F1Racing" />
<bean id="PassengerBus" class="com.car.impl.PassengerBus" />
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
改造主方法
package com.car.main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.car.helper.SpeedCarHelper;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
SpeedCarHelper helper = (SpeedCarHelper) context.getBean("speedCarHelper");
helper.getSpeed();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
结果显示
现在我们通过beans.xml文件生成指定的输出,如果在后续的工作中我们希望输出客运大巴的最高时速,直接更改xml文件即可,不用修改代码,这样就降低了代码的耦合度。
————————————————
版权声明:本文为CSDN博主「zihui_xu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bronzehammer/article/details/86631981
Spring松耦合的个人理解和代码实例相关推荐
- Spring松耦合的实现
HelloShiyanlou 与松耦合的实现 一.实验介绍 1.1 实验内容 本节实验将带你入门简单的 Maven 项目创建和如何实现松耦合. 1.2 实验知识点 Maven 介绍 Spring 松耦 ...
- Spring(5)---松耦合实例
Spring松耦合实例 面向对象的概念,是一个很好的设计来打破系统进入一个组可重用的对象.然而,当系统变大,尤其是在Java项目,庞大的对象依赖关系将一直紧密耦合引起对象难以管理或修改.在这种情况下, ...
- 【设计模式】理解高内聚、松耦合
"高内聚.松耦合"是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围.很多设计原则都以实现代码的"高内聚.松耦合"为 ...
- 使用RabbitMQ实现松耦合设计
我们把三种交换器讲解完毕了,我们再来看一下,如果使用RabbitMQ,实现松耦合设计,要讲松耦合,我们得先回到就是为什么要使用RabbitMQ,解决什么问题,在这章节当中呢,分别给大家介绍了一下,我们 ...
- 迪米特法则实现“高内聚、松耦合”
什么是"高内聚.松耦合"? 如何利用迪米特法则来实现"高内聚.松耦合"? 有哪些代码设计是明显违背迪米特法则的?对此又该如何重构? 何为"高内聚.松耦 ...
- 【设计模式之美 设计原则与思想:设计原则】22 | 理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”?
今天,我们讲最后一个设计原则:迪米特法则.尽管它不像 SOLID.KISS.DRY 原则那样,人尽皆知,但它却非常实用.利用这个原则,能够帮我们实现代码的"高内聚.松耦合".今天, ...
- 如何用迪米特法则(LOD)实现“高内聚、松耦合”?
什么是"高内聚.松耦合"? 如何利用迪米特法则来实现"高内聚.松耦合"? 有哪些代码设计是明显违背迪米特法则的?对此又该如何重构? 何为"高内聚.松耦 ...
- 案例学习BlazeDS+Spring之八InSync06“松耦合”UI同步事件通知
InSync06:增加"松耦合"UI同步事件通知 一.运行DEMO: 1.运行程序:http://localhost:8400/spring-flex-testdrive/insy ...
- 松耦合的比较容易理解的解释
软件设计中的"耦合"指,两个功能函数之间的依赖程度. 比如,你设计的一个程序,需要你编写10个功能函数来实现.如果这10个功能中,有9个功能都要调取第10个功能函数X10,那么,当 ...
最新文章
- Socket程序从windows移植到linux下需要注意的
- 打开AD组策略编辑器提示“strings区段项目太长被截断”的解决
- ActiveMovie属性说明,使用资料。
- switch语句嵌套if_C++核心准则ES.70:进行选择时,switch语句比if语句好
- golang的reflection(转)(一)
- python 编程效率_如何有效提升数据分析效率?五大Python技巧
- 如何快速的入门Docker并且实现部署
- 整数分解为若干项之和python_SVD奇异值分解及Python实例
- Linux基础——Linux 基本指令 ls 和 cd
- 周志华《机器学习》-所有公式推导集合
- 计算机软件进费用什么科目,购买软件费用如何记账?
- 手机端App显示jsp页面的注意事项
- Python 使用turtle在画布的随机位置绘制颜色随机的五角星
- 阿里云服务器租用价格最新收费标准(2019实时更新)
- web前端-----细线表格(table)的制作
- 【知识点】eval() 的用法
- vue集成汉字转拼音并提取首字母
- 天池竞赛——服务器故障预测
- jpg转bmp(使用libjpeg库)
- 【泛微表单】请假流程中计算请假时长(非系统自带考勤类型)
热门文章
- Qt中应用程序的打包与发布
- 软件开发生命周期中的设计阶段_BIM咨询在设计阶段包含哪些内容?体现了哪些价值?...
- 文巾解题 881. 救生艇
- 深度学习核心技术精讲100篇(六十三)-【CNN】一文详细讲解前因后果
- 万字长文,一文读懂Linux的常规操作(墙裂建议收藏)
- tableau实战系列(十八)-通过可视化实现购物篮关联分析( Market Basket Analysis),关联物品之间的关联关系
- Tableau必知必会之巧用 Index 函数查看数据类别详情
- 深度学习-循环神经网络(RNN)
- Python--读取csv文件的整列
- numpy.linspace详解