您好,登錄后才能下訂單哦!
java中代理模式有哪些分類?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Java的基本數據類型分為:1、整數類型,用來表示整數的數據類型。2、浮點類型,用來表示小數的數據類型。3、字符類型,字符類型的關鍵字是“char”。4、布爾類型,是表示邏輯值的基本數據類型。
1.靜態代理
由程序員創建或者由第三方工具生成,再進行編譯;在程序運行之前,代理類的.class文件已經存在了。靜態代理通常只代理一個類,并且要事先知道代理的是什么。
public class BlogStaticProxy implements IBlogService{ private IBlogService blogService; public BlogStaticProxy(IBlogService blogService) { this.blogService = blogService; } @Override public void writeBlog() { System.out.println("start writing..."); blogService.writeBlog(); System.out.println("end writing..."); } }
2.動態代理
動態代理的代理類在程序運行前是不存在的,也就是說代理類在程序運行時才創建的代理模式成為動態代理。這種情況下,代理類并不是在Java代碼中定義好的,而是在程序運行時根據我們的在Java代碼中的“指示”動態生成的。
public class MainClass { public static void main(String[] args) { //1、創建一個真實角色 Singer target = new Singer(); //2、調用Proxy.newProxyInstance方法,并構造一個InvocationHandler對象, //3、在對象內部重寫invoke方法,同時調用method.invoke(target,args); //4、并在該方法的上下添加自己的代碼邏輯 //其中:target.getClass().getClassLoader():獲取類加載器,用來生成代理對象; // target.getClass().getInterfaces()獲取接口元信息; ISinger iSinger = (ISinger) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("動態代理---向觀眾問好");//在真實對象的方法被調用“前”編寫自己的業務邏輯 Object returnValue = method.invoke(target,args);//此處通過反射調用真實對象對應的方法; System.out.println("動態代理---向觀眾問好");//在真實對象的方法被調用“后”編寫自己的業務邏輯 return returnValue; } }); iSinger.sing(); } } //測試結果 "C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" "-javaagent:C:\Program....... 動態代理---向觀眾問好 sing a song 動態代理---向觀眾問好 Process finished with exit code 0
關于java中代理模式有哪些分類問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。