怎樣攔截classloader實現類方法截獲
我目前正在開發的一個元件想實現一個功能: 就是透過配置檔案配置類名,就能夠攔截該類所有方法的呼叫,而該類可能沒有實現任何介面,並且這個過程對於系統程式是透明的,我想在虛擬機器這層解決這個問題,對於元件的部署都是非常有幫助的.
目前我的想法就是透過攔截classloader,或者實現自己的classloader,另外透過修改原class的字解碼實現攔截方法。但是遇到2個難題:
1)classloader的攔截似乎並不那麼聽話,我是透過Thread.setContextClassLoader()來設定自己的classloader,但是似乎對於下面的程式,並不一定就會採用我設定的classloader工作,在多個容器和JDK版本下試過,行為有點不一樣,而SUN在這方面的資料又非常匱乏。
2)字解碼修改,往往我需要代理的類在我的元件執行時已經被上層classloader載入,這時試圖修改該類的字解碼,會引起JVM報錯,比如重複載入之類的錯誤。
由於資料非常匱乏,所以,非常希望有這方面經驗的人,能夠給大家講解一下虛擬機器載入類的時序,已經類生存的週期,名稱空間,以及安全控制等問題,當然最重要的是告訴我怎麼實現我想要的功能,呵呵。
目前我的想法就是透過攔截classloader,或者實現自己的classloader,另外透過修改原class的字解碼實現攔截方法。但是遇到2個難題:
1)classloader的攔截似乎並不那麼聽話,我是透過Thread.setContextClassLoader()來設定自己的classloader,但是似乎對於下面的程式,並不一定就會採用我設定的classloader工作,在多個容器和JDK版本下試過,行為有點不一樣,而SUN在這方面的資料又非常匱乏。
2)字解碼修改,往往我需要代理的類在我的元件執行時已經被上層classloader載入,這時試圖修改該類的字解碼,會引起JVM報錯,比如重複載入之類的錯誤。
由於資料非常匱乏,所以,非常希望有這方面經驗的人,能夠給大家講解一下虛擬機器載入類的時序,已經類生存的週期,名稱空間,以及安全控制等問題,當然最重要的是告訴我怎麼實現我想要的功能,呵呵。
相關文章
- 前端架構之vue+axios 前端實現登入攔截(路由攔截、http攔截)前端架構VueiOS路由HTTP
- Java實現的攔截器Java
- Java Struts 實現攔截器Java
- Xposed攔截抽象方法抽象
- 【Struts2】:攔截器實現方法過濾
- 攔截器,攔截器棧總結
- win10qq聊天廣告怎樣攔截_win10電腦qq聊天廣告攔截怎麼設定Win10
- Asp.Netcore使用Filter來實現介面的全域性異常攔截,以及前置攔截和後置攔截ASP.NETNetCoreFilter
- SpringBoot攔截器中獲取註解、攔截器中注入ServiceSpring Boot
- Mybatis 分頁:Pagehelper + 攔截器實現MyBatis
- 小程式手動實現路由攔截路由
- Struts2攔截器實現原理
- Proxy代理資料攔截方法
- 基於node Express 攔截器的實現Express
- SpringMVC中的攔截器Interceptor實現SpringMVC
- Flume內建攔截器與自定義攔截器(程式碼實戰)
- SpringMVC攔截器,設定不攔截的URLSpringMVC
- MyBatis攔截器MyBatis
- Mybatis 攔截器MyBatis
- sql攔截器SQL
- 導彈攔截
- C#使用委託實現函式回撥,方法呼叫攔截C#函式
- vue中用axios攔截器攔截請求和響應VueiOS
- Autofac實現攔截器和切面程式設計程式設計
- win10 360攔截在哪裡找_win10怎麼找360攔截器Win10
- 防止瀏覽器或系統攔截軟體攔截的指令碼怎麼寫瀏覽器指令碼
- Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高階配置”SpringMVC
- 攔截|篡改|偽造.NET類庫中不限於public的類和方法
- win10 microsoft edge網址被攔截如何取消攔截Win10ROS
- axios 攔截器 的使用方法iOS
- 視窗被攔截的解決方法
- 使用攔截器的方法過濾特性
- 微信域名攔截檢測 查詢微信中域名是否被攔截的最新方法
- axios攔截器iOS
- Mybatis Interceptor 攔截器MyBatis
- WKCrashSDK - crash攔截工具
- axios 攔截器iOS
- spring攔截器Spring