亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談Java中的private方法是否可以被代理

 更新時間:2023年12月26日 10:44:12   作者:茫然背影  
這篇文章主要介紹了淺談Java中的private方法是否可以被代理,在?Java?8之前,接口可以有常量變量和抽象方法,我們不能在接口中提供方法實現(xiàn),如果我們要提供抽象方法和非抽象方法(方法與實現(xiàn))的組合,那么我們就得使用抽象類,需要的朋友可以參考下

JDK動態(tài)代理中:抽象類不可以被代理  沒有接口不可以被代理

  • 在 Java 8之前,接口可以有常量變量和抽象方法。我們不能在接口中提供方法實現(xiàn)。如果我們要提供抽象方法和非抽象方法(方法與實現(xiàn))的組合,那么我們就得使用抽象類。
  • 在 Java 8 接口引入了一些新功能——默認方法和靜態(tài)方法。
  • Java 9 不僅像 Java 8 一樣支持接口默認方法,同時還支持私有方法

jdk1.9接口中可以有static、default、private方法、private static方法 同時他們都必須有方法體

接口的靜態(tài)方法能被重寫或實現(xiàn)嗎?

  • 不可被重寫
  • 不可被代理

靜態(tài)方法是屬于類的,不屬于對象,類哪有重寫或實現(xiàn),所以在其實現(xiàn)類里當然不能重寫或實現(xiàn) 在代理中也不會有此方法,userProxy里面都沒有,更別說被代理了,那是不可能的

defaultMethod可以被代理嗎?

可以被重寫(不強制),也可以被代理

privateMethod可以被代理嗎?

不可被重寫 不可被代理

只能在接口自己內(nèi)部調(diào)用,,都沒有權限訪問它當然不能被代理了,所以動態(tài)代理中根本不會有這個私有方法

當然為了證明這一點可以 使用接口的公共方法來間接調(diào)用它,看它到底有沒有被代理, // 而接口中可以有方法體的只有static、default、private方法,而static又不可以(static不可以調(diào)用非static方法),別無選擇,只能用default測了  發(fā)現(xiàn)private并沒有被代理

protected 、package下面方法可以被代理嗎?

這些修飾符在接口中都是不允許的,接口中都沒有,哪來的代理啊  

總結

綜上所述只有public和default方法可以被代理,private和static都不可以,

  • public可重寫可被代理(在實現(xiàn)類中重寫是強制的)
  • private和static不可以被重寫也不可以被代理
  • default可重寫可代理(在實現(xiàn)類中不強制必須重寫,不過不管重寫不重寫都會自動被代理)
public interface MapperInterface {
    static void staticMethod() {
        System.out.println("static bb");
    }
    default void defaultMethod() {
        privateMethod();
    }
    private static void privateMethod() {
        System.out.println("MapperInterface private");
    }
    void publicMethod();
}
public class DynamicProxy {
    public static <T> T getProxy(T t) {
        return (T) Proxy.newProxyInstance(t.getClass().getClassLoader(), t.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //調(diào)用目標方法之前做的公共邏輯
                System.out.println("建立連接");
                //調(diào)用目標方法,這句話必須要有的,就是調(diào)用被傳入的對象的方法(里面寫了核心代碼)
                Object object = method.invoke(t, args);
                //調(diào)用目標方法之后做的公共邏輯
                System.out.println("提交事務");
                System.out.println("關閉連接");
                return object;
            }
        });
    }
}
public class User implements MapperInterface {
    @Override
    public void publicMethod() {
        System.out.println("user public");
    }
// 可以被重寫 不強制,不管有沒有重寫 都可以被代理
//    @Override
//    public void defaultMethod() {
//        System.out.println("user default");
//    }
}
public class Test {
    public static void main(String[] args) {
        User user = new User();
        MapperInterface userProxy = DynamicProxy.getProxy(user);
        userProxy.defaultMethod();
    }
}

到此這篇關于淺談Java中的private方法是否可以被代理的文章就介紹到這了,更多相關Java中的private方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java異常javax.net.ssl.SSLHandshakeException: SSL的解決方法

    Java異常javax.net.ssl.SSLHandshakeException: SSL的解決方法

    在Java開發(fā)過程中,SSL(Secure Sockets Layer)握手異常是一個常見的網(wǎng)絡通信錯誤,特別是在使用HTTPS協(xié)議進行安全通信時,本文將詳細分析javax.net.ssl.SSLHandshakeException: SSL這一異常的背景、可能的原因,并通過代碼示例幫助您理解和解決這一問題
    2024-12-12
  • 詳解Java編程JDialog窗體的用法及實例

    詳解Java編程JDialog窗體的用法及實例

    這篇文章主要介紹了Java編程中JDialog窗體的用法及實例,描述了其特征,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Mybatis超級強大的動態(tài)SQL語句大全

    Mybatis超級強大的動態(tài)SQL語句大全

    MyBatis的動態(tài)SQL是基于OGNL表達式的,它可以幫助我們方便的在SQL語句中實現(xiàn)某些邏輯,下面這篇文章主要給大家介紹了關于Mybatis超級強大的動態(tài)SQL語句的相關資料,需要的朋友可以參考下
    2022-05-05
  • maven父子工程多模塊統(tǒng)一管理版本號的解決方法

    maven父子工程多模塊統(tǒng)一管理版本號的解決方法

    maven父子工程多模塊,每個模塊還都可以獨立存在,子模塊往往通常希望和父工程保持一樣的版本,如果每個工程單獨定義版本號,后期變更打包也非常麻煩,,所以本文給大家介紹了maven父子工程多模塊如何管理統(tǒng)一的版本號,需要的朋友可以參考下
    2024-09-09
  • 解決java.util.NoSuchElementException異常的問題

    解決java.util.NoSuchElementException異常的問題

    這篇文章主要介紹了解決java.util.NoSuchElementException異常的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java 數(shù)據(jù)結構之堆的概念與應用

    Java 數(shù)據(jù)結構之堆的概念與應用

    堆是一顆完全二叉樹,在這棵樹中,所有父節(jié)點都滿足大于等于其子節(jié)點的堆叫大根堆,所有父節(jié)點都滿足小于等于其子節(jié)點的堆叫小根堆,堆雖然是一顆樹,但是通常存放在一個數(shù)組中,父節(jié)點和孩子節(jié)點的父子關系通過數(shù)組下標來確定
    2021-10-10
  • Java線程運行的原理詳解

    Java線程運行的原理詳解

    這篇文章主要為大家詳細介紹了Java線程運行的原理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • SpringSecurity導致SpringBoot跨域失效的問題解決

    SpringSecurity導致SpringBoot跨域失效的問題解決

    本文主要介紹了SpringSecurity導致SpringBoot跨域失效的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 獲取系統(tǒng)參數(shù)System.getProperties()與配置文件參數(shù)@Value(“${key}“)

    獲取系統(tǒng)參數(shù)System.getProperties()與配置文件參數(shù)@Value(“${key}“)

    這篇文章主要介紹了獲取系統(tǒng)參數(shù)System.getProperties()與配置文件參數(shù)@Value("${key}"),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java中的springboot監(jiān)聽事件和處理事件詳解

    Java中的springboot監(jiān)聽事件和處理事件詳解

    這篇文章主要介紹了Java中的springboot監(jiān)聽事件和處理事件,這個示例展示了如何在Spring Boot應用中定義自定義事件、發(fā)布事件以及監(jiān)聽事件,需要的朋友可以參考下
    2024-07-07

最新評論