新聞中心
這篇文章給大家介紹spring自動注入接口的多個實現(xiàn)類是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)公司是少有的做網(wǎng)站、網(wǎng)站設(shè)計、營銷型企業(yè)網(wǎng)站、成都微信小程序、手機(jī)APP,開發(fā)、制作、設(shè)計、賣鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,于2013年成立,堅持透明化,價格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評
在使用spring開發(fā)的時候,有時候會出現(xiàn)一個接口多個實現(xiàn)類的情況,但是有沒有有時候有這樣一種情況,就是你的邏輯代碼里面還不知道你需要使用哪個實現(xiàn)類,就是比如說:你去按摩,按摩店里面有幾種會員打折,比如有,vip、svip和普通用戶,那按摩店里面是不是需要對這些會員定義好不同的折扣,然后根據(jù)每個用戶不同的會員計算出不同的消費情況
雖然這樣的情況,對于一般人來說,第一眼肯定就是說,直接加 if else 去判斷就可以了
這樣做,對于實現(xiàn)功能而言,肯定是沒問題,如果以后這個按摩店又增加一種會員,那你是不是又要去修改你的邏輯代碼去在加一個 if else ,這樣就違反了系統(tǒng)架構(gòu)設(shè)計的開閉原則,這樣寫if else 也使你的代碼看起來不優(yōu)雅。
所以在代碼里面,我們可以先定義一個DiscountStrategy接口類
public interface DiscountStrategy {
public String getType();
public double disCount(double fee);
}
然后在寫他的幾個實現(xiàn)類
普通用戶實現(xiàn)類
@Service
public class NormalDisCountService implements DiscountStrategy {
public String getType(){
return "normal";
}
public double disCount(double fee){
return fee * 1;
}
}
會員實現(xiàn)類
public class VipDisCountService implements DiscountStrategy{
public String getType(){
return "vip";
}
public double disCount(double fee){
return fee * 0.8;
}
}
svip超級會員實現(xiàn)類
@Service
public class SVipDisCountService implements DiscountStrategy {
public String getType(){
return "svip";
}
public double disCount(double fee){
return fee * 0.5;
}
}
然后當(dāng)一個用戶進(jìn)來消費的時候,根據(jù)你當(dāng)前的身份去打折扣
定義一個map集合,然后把所有的實現(xiàn)類都放入到這個集合中,然后根據(jù)當(dāng)前的會員類型去進(jìn)行不同的操作
@Service
public class DisCountStrageService {
Map
// 構(gòu)造函數(shù),如果你是集合接口對象,那么就會把spring容器中所有關(guān)于該接口的子類,全部抓出來放入到集合中
public DisCountStrageService(List
for (DiscountStrategy discountStrategy: discountStrategys) {
discountStrategyMap.put(discountStrategy.getType(),discountStrategy);
}
}
public double disCount(String type,Double fee){
DiscountStrategy discountStrategy =discountStrategyMap.get(type);
return discountStrategy.disCount(fee);
}
}
測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class MzySpringModeApplicationTests {
@Autowired
OrderService orderService;
@Autowired
DisCountStrageService disCountStrageService;
@Test
public void contextLoads() {
//orderService.saveOrder();
double vipresult = disCountStrageService.disCount("vip",100d);
double svipresult = disCountStrageService.disCount("svip",100d);
double normalresult = disCountStrageService.disCount("normal",100d);
System.out.println(vipresult);
System.out.println(svipresult);
System.out.println(normalresult);
}
}
其實這就是java設(shè)計模式的策略模式,只不過就是用構(gòu)造函數(shù)注入到list集合中
就算以后按摩店繼續(xù)增加了一種會員體系,比如黑卡用戶,只需要去寫一個接口的實現(xiàn)類,而不需要去修改以前的代碼,這也沒有違反系統(tǒng)架構(gòu)的開閉原則(對修改關(guān)閉,對擴(kuò)展開放)
注意:上面這種方式只能適用于springboot項目,對于以前的那種springmvc模式不支持,會報錯,因為以前的方式注入是通過配置文件去注入的,需要去修改一個applicationContext的配置文件
關(guān)于spring自動注入接口的多個實現(xiàn)類是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
新聞名稱:spring自動注入接口的多個實現(xiàn)類是怎樣的
瀏覽地址:http://www.dlmjj.cn/article/pippoh.html