javascript
Spring松耦合的个人理解和代码实例
Spring松耦合的個(gè)人理解和代碼實(shí)例
理解Spring的松耦合概念,那么我們先來看看一個(gè)不使用Sring的實(shí)例代碼
先看一下整個(gè)測(cè)試項(xiàng)目案例的結(jié)構(gòu)
正常方式
創(chuàng)建一個(gè)接口,這個(gè)接口指定車輛的行駛速度
package com.car.run;
public interface SpeedCar {
?? ?public void runSpeed();
}
1
2
3
4
5
6
7
8
現(xiàn)在我們指定兩輛車的行駛速度:一輛F1賽車,行駛最高速度為300 km/h, 一輛客運(yùn)大巴,速度為 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
//客運(yùn)大巴
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
按正常方式我們直接調(diào)用
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
目前來看,其實(shí)這種方法也挺簡(jiǎn)單的,無非就是new 出一個(gè)客運(yùn)大巴的對(duì)象 speedcar,然后通過speedcar來輸出客運(yùn)大巴的最高時(shí)速。但是我們new出的對(duì)象speedcar完全依賴的是客運(yùn)大巴,或者說對(duì)客運(yùn)大巴的耦合度特別高,它也僅僅是指向客運(yùn)大巴PassengerBus,如果我們要輸出F1賽車的最高時(shí)速,那么還需要再次new出F1賽車的對(duì)象。
結(jié)果顯示
通過輔助類實(shí)現(xiàn)
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
改造我們上一個(gè)方法中主方法實(shí)現(xiàn)內(nèi)容
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
那么實(shí)際上這種方法也是一種高耦合,helper依賴與輔助類,而這個(gè)輔助類又依賴與客運(yùn)大巴PassengerBus。
結(jié)果顯示
Spring實(shí)現(xiàn)
最后,我們通過Spring的依賴注入,實(shí)現(xiàn)生成松散的耦合。
改造輔助類
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
創(chuàng)建 Spring bean 的配置文件,并在這里聲明所有的Java對(duì)象的依賴
<?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
結(jié)果顯示
現(xiàn)在我們通過beans.xml文件生成指定的輸出,如果在后續(xù)的工作中我們希望輸出客運(yùn)大巴的最高時(shí)速,直接更改xml文件即可,不用修改代碼,這樣就降低了代碼的耦合度。
————————————————
版權(quán)聲明:本文為CSDN博主「zihui_xu」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/bronzehammer/article/details/86631981
總結(jié)
以上是生活随笔為你收集整理的Spring松耦合的个人理解和代码实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IoC好处
- 下一篇: Spring IOC实现