java根據(jù)不同的參數(shù)調(diào)用不同的實現(xiàn)類操作
本猿今天今天幫公司寫第三支付接口的時候,靈機一動就想寫一個擴展性比較的強的充值接口,t通過選擇不同的充值渠道,調(diào)用不同的充值實現(xiàn)類(好了,廢話不多說了,上碼?。。。。。?/p>
首先你得寫一個接口(樓主用的框架是springMVC +Spring +嘿嘿)PayService

然后寫你的PayService實現(xiàn)類 EcpssPayService(第三方接口實現(xiàn)類)和 ReapalPayService(第三方接口實現(xiàn)類) 注意幾點(注解一定得跟上)

好了之后 就可以 寫一個工具類了 SpringBeanUtil(這其中至于違背了Spring的 依賴注入思想 慎用什么的 我只想說你愛用不用 嘿嘿)

寫好了之后(ok完工了), 接下來你就可以在Controller中調(diào)用了(你通過前端傳過來的參數(shù)payWay來調(diào)用不同的實現(xiàn)類:比如說我傳過來的是reapal
那么就掉用ReapalService類,傳過來的是ecpss那么就調(diào)用EcpssPayService!).

最后再說下你的實現(xiàn)類一定是在Spring 加載掃描包的時候能掃描到,否則你就Duang了如果爆了類未定義少年那只能說明你還年輕 嘿嘿 去看看applicationContext.xml如下

看看component-scan 有沒有掃描到你的兩個實現(xiàn)類的包的路徑 over?。。?!
補充知識:在java類中實現(xiàn)不同接口的同名方法時,該方法屬于哪個接口?
存在這樣一種情況,有一個類實現(xiàn)了兩個接口,在這兩個接口當中有相同的方法(同名同參),那么類中的該實現(xiàn)方法屬于哪個接口的呢?
public interface InterfaceA {
void method();
void methodA();
}
public interface InterfaceB {
void method();
void methodB();
}
public class Subject implements InterfaceA, InterfaceB {
@Override
public void method() {
}
@Override
public void methodB() {
}
@Override
public void methodA() {
}
}
Subject類實現(xiàn)了InterfaceA和InterfaceB兩個接口的方法,其中method是InterfaceA和InterfaceB共用的相同方法,那么Subject類中實現(xiàn)的該方法是屬于哪個接口的呢?
答案是既是InterfaceA的也是InterfaceB的,什么意思?就是說此時的Subject類你既可以把它當做InterfaceA來使用其中的method方法,也可以把它當做InterfaceB來使用其中的method方法。
Java對于implements的要求是只要在接口中聲明的方法,在實現(xiàn)類中必須要實現(xiàn)它,單看Subject 類,它里面具有method和methodA兩個方法,因此它就是實現(xiàn)了InterfaceA接口所有方法的實現(xiàn)類,同時它里面具有method和methodB兩個方法,因此它也是實現(xiàn)了InterfaceB接口所有方法的實現(xiàn)類。
因此,在使用Subject 類的時候,如果你認為它是InterfaceA,那它就是InterfaceA,如果你為它是InterfaceB,那它就是InterfaceB。
所以可以像下面這樣去使用它,完全沒有問題:
public class Main {
public static void main(String[] args) {
//我現(xiàn)在認為它是一個InterfaceA實現(xiàn)類, 就把它當做一個InterfaceA接口來使用
InterfaceA interfaceA = new Subject();
interfaceA.method();
interfaceA.methodA();
test(interfaceA);
//我現(xiàn)在認為它是一個InterfaceB實現(xiàn)類, 就把它當做一個InterfaceB接口來使用
InterfaceB interfaceB = new Subject();
interfaceB.method();
interfaceB.methodB();
//下面都是完全沒問題的
Subject subject = new Subject();
subject.myMethod();
//當成InterfaceA用
interfaceA = subject;
interfaceA.method();
interfaceA.methodA();
//當成InterfaceA用的過程中又可以當成InterfaceB用
interfaceB = subject;
interfaceB.method();
interfaceB.methodB();
//當成InterfaceB用的過程中又可以再當成InterfaceA用
interfaceA = (InterfaceA) interfaceB;
interfaceA.method();
interfaceA.methodA();
//...隨便用...
}
private static void test(InterfaceA interfaceA){
//如果我知道InterfaceA的實現(xiàn)類同時也implements了InterfaceB
// 那么我就可以把它當做InterfaceB的實現(xiàn)類來使用
InterfaceB interfaceB = (InterfaceB) interfaceA;
interfaceB.method();
interfaceB.methodB();
}
}
以上這篇java根據(jù)不同的參數(shù)調(diào)用不同的實現(xiàn)類操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring?Boot條件注解之@ConditionalOnProperty完全解析
這篇文章主要介紹了SpringBoot中的@ConditionalOnProperty注解,通過配置文件屬性值控制Bean或配置類的加載,實現(xiàn)功能開關和環(huán)境配置,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-02-02
Java使用openOffice對于word的轉(zhuǎn)換及遇到的問題解決
開發(fā)過程中經(jīng)常會使用java將office系列文檔轉(zhuǎn)換為PDF, 一般都使用微軟提供的openoffice+jodconverter 實現(xiàn)轉(zhuǎn)換文檔,下面這篇文章主要給大家介紹了關于Java通過openOffice對于word的轉(zhuǎn)換及遇到問題的解決方法,需要的朋友可以參考下2018-09-09
JavaWeb實戰(zhàn)之編寫單元測試類測試數(shù)據(jù)庫操作
這篇文章主要介紹了JavaWeb實戰(zhàn)之編寫單元測試類測試數(shù)據(jù)庫操作,文中有非常詳細的代碼示例,對正在學習javaweb的小伙伴們有很大的幫助,需要的朋友可以參考下2021-04-04
Spring Cloud實現(xiàn)微服務調(diào)用的負載均衡(詳解)
負載均衡就是將負載(工作任務,訪問請求)進行分攤到多個操作單元(服務器,組件)上進行執(zhí)行,根據(jù)負載均衡發(fā)生位置的不同,一般分為服務端負載均衡和客戶端負載均衡,本文給大家介紹Spring Cloud實現(xiàn)微服務調(diào)用的負載均衡的相關知識,感興趣的朋友一起看看吧2024-03-03
Java FineReport報表工具導出EXCEL的四種方式
這篇文章主要介紹了Java FineReport報表工具導出EXCEL的四種方式的相關資料,需要的朋友可以參考下2016-03-03
親手教你SpringBoot中的多數(shù)據(jù)源集成問題
本文主要是介紹基于springboot的多數(shù)據(jù)源切換,輕量級的一種集成方案,對于小型的應用可以采用這種方案,我之前在項目中用到是因為簡單,便于擴展以及優(yōu)化,對SpringBoot多數(shù)據(jù)源集成問題感興趣的朋友一起看看吧2022-03-03
JAVA?Springboot配置i18n國際化語言詳細步驟
國際化(Internationalization,縮寫為i18n)是指根據(jù)來展示不同的內(nèi)容,使應用程序能夠適應不同的語言和文化習慣,下面這篇文章主要給大家介紹了關于JAVA?Springboot配置i18n國際化語言的詳細步驟,需要的朋友可以參考下2024-08-08

