java服務介面
① java 介面
[編輯本段]什麼是介面
Java中的介面是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
介面的兩種含義:一,Java介面,Java語言中存在的結構,有特定的語法和結構;二,一個類所具有的方法的特徵集合,是一種邏輯上的抽象。前者叫做「Java介面」,後者叫做「介面」。
在Java語言規范中,一個方法的特徵僅包括方法的名字,參數的數目和種類,而不包括方法的返回類型,參數的名字以及所拋出來的異常。在Java編譯器檢查方法的重載時,會根據這些條件判斷兩個方法是否是重載方法。但在Java編譯器檢查方法的置換時,則會悔歲進一步檢查兩個方法(分處超類型和子類型)的返還類型和拋出的異常是否相同。
介面繼承和實現繼承的規則不同,一個類只有一個直接父類,但可以實現多個介面。
Java介面本身沒有任何實現,因為Java介面不涉及表象,而只描述public行為,所晌灶以Java介面比Java抽象類更抽象化。
Java介面的方法只能是抽象的和公開的,Java介面不能有構造器,Java介面可以有public,靜態的和final屬性。
介面把方法的特徵和方法的實現分割開來。這種分割體現在介面常常代表一個角色,它包裝與該角色相關的操作和屬性,而實現這個介面的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,並不要求其它的共同之處。
[編輯本段]為什麼使用介面
兩個類中的兩個類似的功能,調用他們的類動態的決定一種實現,那他們提供一個抽象父類,子類分別實現父類所定義的方法。
問題的出現:Java是一種單繼承的語言,一般情況下,哪個具體類可能已經有了一個超類,解決是給它的父類加父類,或者給它父類的父類加父類,只到移動到類等級結構的最頂端。這樣一來,對一個具體類的可插入性的設計,就變成了對整個等級結構中所有類的修改。
介面是可插入性的保證。
在一個等級結構中的任何一個類都可以實現一個介面,這個介面會影響到此類的所有子類,但不會影響到此類的任何超類。此類將不得不實現這個介面所規定的方法,而其子類可以從此類自動繼承這些方法,當然也可以選擇置換掉所有的這些方法,或者其中的某一些方法,這時候,這些子類具有了可插入性(並且可以用這個介面類型裝載,傳遞實現了他的所有子類)。
我們關心的不是那一個具體的類,而是這個類是否實現了我們需要的介面。
介面提供了關聯以及方法調用上的可插入性,軟體系統的規模越大,生命周期越長,介面使得軟體系統的靈活性和可擴展性,可插入性方面得到保證。
類型
使用Java介面將軟體單位與內部和外部耦合起來。使用Java介面不是具體的類進行變數的類型聲明,方法的返還類型聲明,參量的類型聲明,以及數據類型的轉換。
在理想的情況下,一個具體的Java類應當只實現Java介面和抽象Java類中聲明的方法,而不應當給多餘方法。
類型等級結構
Java介面(以及抽象類)一般用來作為一個類型的等級結構的起點。
如果一個類已經有了一個主要的超類型,那麼通過實現一個介面,這個類可以擁有另一個次要的超類型,這種次要的超類型叫做混合類型。
[編輯本段]Java介面常用方法
單方法介面
以下是引用片段:
public interface Actionlistener{
public abstract void actionPerformed(ActionEvent event);
}
僅且只有一個方法,只有實現了這個介面(重寫這個介面中的唯一一個方法),你才有資格去事件監聽器列表裡注冊(參數為Actionlistener類型),當事件源變動時,自動調用這個唯一的actionPerformed方宴前扮法.
標識介面
是沒有任何方法和屬性的介面。標識介面不對實現它的類有任何語意上的要求,它僅僅表明了實現它的類屬於一個特定的類型(傳遞)。
不推薦過多的使用標識介面。
常量介面
用Java介面來聲明一些常量,然後由實現這個介面的類使用這些常量(以前在做畫板的時候這么干過)。建議不要模仿這種常量介面的做法。
② java的常用介面有哪些
集合主要有Collection和Map介面。
List特點:元素有放入順序,元素可重復
Map特點:元素按鍵值對存儲,無放入順序
Set特點:元素無放入順序,元素不可重復(注意:模粗元素雖然無放入順序,但是元素在set中的位置是滑旦有該元素的HashCode決定的,其位置其實是固定的)
List介面有三個實現類:LinkedList,ArrayList,Vector
LinkedList:底層基於鏈表實現,鏈表內存是散亂的,每一個元素存儲本身內存地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢
ArrayList和Vector的區別:ArrayList是非線程安全的,效率高;Vector是基於線程安全的,效率低
Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet
SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現)
Query介面有一個實現類:LinkList
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap
HashMap非線程安全,高效,支持null;HashTable線程安全,低效,不支持null
SortedMap有一個實現類:TreeMap
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,存儲的是鍵值對
set 一般無序不重復.map kv 結構 list 有旦讓鎮序 。
③ Java 提供介面服務,安全怎麼保證
我們在開發過程中,肯定會有和第三方或者app端的介面調用。在調用的時候,下面的方法可以來防止非法鏈接或者惡意攻擊。
一、簽名仿敏凳
根據用戶名或者用戶id,結合用戶的ip或者設備號,生成一個token。在請求後台,後台獲取http的head中的token,校驗是否合法(和資料庫或者Redis中記錄的是否一致,在登錄或者初始化的時候,存入資料庫/redis)
在使用Base64方式的編碼後,Token字元串還是有20多位,有的時候還是嫌它長了。由於GUID本身就有128bit,在要求有良好的可讀性的前提下,很難進一步改進了。那我們如何產生更短的字元串呢?還有一種方式就是較少Token的長度,不用GUID,而採用一定長度的隨機數,例如64bit,再用Base64編碼表示:
varrnd =newRandom();
vartokenData =userIp+userId;
rnd.NextBytes(tokenData);
vartoken =Convert.ToBase64String(tokenData).TrimEnd('=');
由於這里只用了64bit,此時得到的字元串為Onh0h95n7nw的形式,長度要短一半。這樣就方便攜帶多了。但是這種方式是沒有拿清唯一性保證的。不過用來作為身份認證的方式還是可以的(如網盤的提取碼)。
二、加密
客戶端和伺服器都保存一個秘鑰,每次傳輸都加密,服務端根據秘鑰解密。
客戶端:
1、設置一個key(和伺服器端相同)
2、根據上述key對請求進行某種加密(加密必須是可逆的,以便伺服器端解密)
3、發送請求給伺服器
伺服器端:
1、設置一個key
2、根據上述的key對請求進行解密(校驗成功就是「信任」的客戶端發來的數據,否則拒絕響應)
備旅 3、處理業務邏輯並產生結果
4、將結果反饋給客戶端
三、第三方支持
比如springsecurity-oauth
④ 什麼是Java介面
Java介面(英文:Interface),在JAVA編程語言中是一個抽象類型,是抽象方法的集合,介面通常以interface來聲明。一個類通過繼承介面的方式,從而來繼承介面的抽象方法,以下是java課程培訓機構為大家搜索整理的Java介面是什麼,希望能給大家帶來幫助,更多專業知識請及時關注海文IT知識頻道!
介面並不是類,編寫介面的方式和類很相似,但是它們屬於不同的概念。類描述對象的屬性和方法雹睜空。介面則包含類要實現的方法。
除非實現介面的類是抽象類,否則該類要定義介面中的所有方法。
介面無法被實例化,但是可以被實現。一個實現介面的類,必須實現介面內所描述的所有方法,否則就必須聲明為抽象類。另外,在Java中,介面類型可用來聲明一個變數,他們可以成為一個空指針,或是被綁定在一個以此介面實現的對象。
介面與類相似點:
一個早拍介面可以有多個方法。
介面文件保存在.java結尾的文件中,文件名使用介面名。
介面的位元組碼文件保存在.class結尾的文件中。
介面相應的位元組碼文件必須在與包名稱相匹配的目錄結構中。
介面與類的區別:
介面不能用於實例化對源瞎象。
介面沒有構造方法。
介面中所有的方法必須是抽象方法。
介面不能包含成員變數,除了static和final變數。
介面不是被類繼承了,而是要被類實現。
介面支持多重繼承。
⑤ java客戶端如何調用服務端的介面
如果你的data格式是{area:」xxx「,sourceType:」xxx「,factoryName:」xxxx「}這樣子 在你的success方法里 通過data.area獲取 area的值,以此類推
⑥ JAVA 介面是什麼
Java介面是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
介面作用如下:
1、豐富Java面向對象的思想:在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的面向對象能力。
2、提供簡單、規范性:如果一個項目比較龐大,那麼就需要一個能理清所有業務的架構師來定義一些主要的介面,這些介面不僅告訴開發人員你需要實現那些業務,而且也將命名規范限制住了(防止一些開發人員隨便命名導致別的程序員無法看明白)。
3、提高維護、拓展性:比如你要做一個畫板程序,其中裡面有一個面板類,主要負責繪畫功能,然後你就這樣定義了這個類,可是在不久將來,你突然發現這個類滿足不了你了,然後你又要重新設計這個類,更糟糕是你可能要放棄這個類,那麼其他地方可能有引用他,這樣修改起來很麻煩,如果你一開始定義一個介面,把繪制功能放在介面里,然後定義類時實現這個介面,然後你只要用這個介面去引用實現它的類就行了,以後要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。
4、增強安全、嚴密性:介面是實現軟體松耦合的重要手段,它描敘了系統對外的所有服務,而不涉及任何具體的實現細節。這樣就比較安全、嚴密一些(一般軟體服務商考慮的比較多)。
(6)java服務介面擴展閱讀:
關於介面的使用規范:
1、介面中可以定義常量,不能定義變數,如果你在介面中定義屬性,那麼通過反編譯可以看見他會自動用public static final 修飾,介面中的屬性都是全局靜態常量,介面中的常量必須在定義時指定初始值。
2、 介面中所有的方法都是抽象方法,介面中方法都會自動用public abstract 修飾,即介面中只有全局抽象方法。
3、 介面不能實例化,介面中不能有構造。
4、 介面之間可以通過extends實現繼承關系,一個介面可以繼承多個介面,但介面不能繼承類。
⑦ java怎樣提供webservice介面
Java通過WSDL文件來調用webservice:
注意,以下的代碼並沒有經悄扮過真正的測試,只是說明肢運禪這些情況,不同版本的Axis相差很大,大家最好以apache網站上的例子為准,這里僅僅用於說明其基本用法。
1,直接AXIS調用遠程的web service
這種方法比較適合那些高手,他們能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是專門搞這行的,即使一段時間看懂,後來也就忘記了。歷塵直接調用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用遠程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL裡面描述的介面名稱
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//介面的參數
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型
String temp = "測試人員";
String result = (String)call.invoke(new Object[]{temp});
//給方法傳遞參數,並且調用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
2,直接SOAP調用遠程的webservice
這種模式我從來沒有見過,也沒有試過,但是網路上有人貼出來,我也轉過來
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
import java.io.*;
import java.net.*;
import java.util.Vector;
public class caService{
public static String getService(String user) {
URL url = null;
try {
url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");
} catch (MalformedURLException mue) {
return mue.getMessage();
}
// This is the main SOAP object
Call soapCall = new Call();
// Use SOAP encoding
soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// This is the remote object we're asking for the price
soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
// This is the name of the method on the above object
soapCall.setMethodName("getUser");
// We need to send the ISBN number as an input parameter to the method
Vector soapParams = new Vector();
// name, type, value, encoding style
Parameter isbnParam = new Parameter("userName", String.class, user, null);
soapParams.addElement(isbnParam);
soapCall.setParams(soapParams);
try {
// Invoke the remote method on the object
Response soapResponse = soapCall.invoke(url,"");
// Check to see if there is an error, return "N/A"
if (soapResponse.generatedFault()) {
Fault fault = soapResponse.getFault();
String f = fault.getFaultString();
return f;
} else {
// read result
Parameter soapResult = soapResponse.getReturnValue ();
// get a string from the result
return soapResult.getValue().toString();
}
} catch (SOAPException se) {
return se.getMessage();
}
}
}
3,使用wsdl2java把WSDL文件轉成本地類,然後像本地類一樣使用,即可。
這是像我這種懶人最喜歡的方式,仍然以前面的global weather report為例。
首先 java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL
原本的網址是http://www.webservicex.net/globalweather.asmx?WSDL,中間個各問號,但是Linux下面它不能解析,所以去掉問號,改為點號。
那麼就會出現4個文件:
GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我們最為關心的介面文件,如果你對RMI等SOAP實現的具體細節不感興趣,那麼你只需要看介面文件即可,在使用的時候,引入這個介面即可,就好像使用本地類一樣。
⑧ java的介面是什麼
介面(Interface)是對符合介面需求的類的一套規范
介面主要作用是可以幫助實現類似於類的多重繼承的功能。
語法如圖
一個Java介面是一些方法特徵的集合,但沒有方法的實現
介面是由常量和抽象方法組成的特殊類
-------------------------------------------------------------
介面的定義
介面的定義包括介面聲明和介面體
介面體包括常量定義和方法定義
-------------------------------------------------------------
介面的實現
在類的聲明中用implements子句來表示一個類使用某個介面
在類體中可以使用介面中定義的常量,而且必須實現介面中定義的所有方法
一個類可以實現多個介面,在implements子句中用逗號分開
----------------------------------------------------------------
介面類型的使用
介面作為一種引用類型來使用
任何實現該介面的類的實例都可以存儲在該介面類型的變數中,通過這些變數可以訪問類所實現的介面中的方法
-------------------------------------------------
介面的特性:
介面可以多重實現
介面可以繼承其它的介面,並添加新的屬性和抽象方法
通過介面可以實現不相關類的相同行為,而不需要考慮這些類之間的層次關系。
通過介面可以指明多個類需要實現的方法。
通過介面可以了解對象的交互界面,而不需了解對象所對應的類
與繼承關系類似,介面與實現類之間存在多態性
⑨ JAVA:什麼是介面,它的主要作用是什麼
java介面是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
1、兩種含義:一,Java介面,Java語言中存在的結構,有特定的語法和結構;二,一個類所具有的方法的特徵集合,是一種邏輯上的抽象。前者叫做「Java介面」,後者叫做「介面」。
2、介面實現和類繼承的規則不同,為了數據的安全,繼承時一個類只有一個直接父類,也就是單繼承,但是一個類可以實現多個介面,介面彌補了類的不能多繼承缺點,繼承和介面的雙重設計既保持了類的數據安全也變相實現了多繼承。
3、Java介面本身沒有任何實現,因為Java介面不涉及表象,而只描述public行為,所以Java介面比Java抽象類更抽象化。但是介面不是類,不能使用new 運算符實例化一個介面。如 x=new comparable(......);//這個是錯誤來的。但是可以聲明介面變數Comparable x; //這是允許的。
4、Java介面的方法只能是抽象的和公開的,Java介面不能有構造器,Java介面可以有public、靜態的和final屬性。即介面中的屬性可以定義為 public static final int value=5;
5、這種分割體現在介面常常代表一個角色,它包裝與該角色相關的操作和屬性,而實現這個介面的類便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,並不要求其它的共同之處。
6、範例
定義介面格式:
[public]interface 介面名稱 [extends父介面名列表]
{
//靜態常量
[public] [static] [final] 數據類型變數名=常量值;
//抽象方法
[public] [abstract] [native] 返回值類型方法名(參數列表);
}
實現介面格式:
[修飾符] class 類名[extends 父類名] [implements 介面A,介面B,···]
{
類成員變數和成員方法;
為介面A中的所有方法編寫方法體,實現介面A;
為介面B中的所有方法編寫方法體,實現介面B;
}
⑩ JAVA介面的原理
介面的實現原理 應該說介面實現是沒有什麼原理的
你定義了一個介面 不去用他也是可以的 沒有問題的
介面可以說是一個工具 或者說是一個規范
在寫作文的時候 老師規定要列提綱 但是實際上作文是可以脫離
提綱而獨立存在 但是有了提綱我們就能很快了解到作為的內容
介面一樣的 一開始我們編程 可能都用不到介面 所以一直在迷惑
這介面到底有什麼作用。
介面當然很有用
等到你做一個大的項目的時候 你就會發現 有一些實體 服務 他們都是差不多的
那就有必要事先把這些服務抽象出介面來
然後我們的編碼就按照介面的規范來實現具體的功能。
以後要是資料庫表結構發生了大變化 重構代碼難度很大 需要這部分功能重新開放 那麼這個介面 就可以復用 對這個介面 進行實現就可以了。
總結出來:介面是服務於我們的代碼 讓我們的代碼更好理解 更有層次感
具體的系統功能 還是在我們的實現類底下的 service最終還是調用我們實現類的
以上原創 手打 沒有用標點的習慣