3
看着使用CGLIB,ASM,BCEL(方面)和Javassist提供的分析字段添加到運行時類....添加字段到Java類
只是爲了讓我的頭直,它看起來像這些字節碼操縱器不會更新實際的類,而只允許用戶轉儲修改(如使用CGLib和writeFile方法)。希望我能找到一個解決方案,(a)加載類(而不是用BCEL做InputStream)和(b)更新類。
也許這是正常的嗎?人們通常會創建一個代理並傳遞代理嗎?
我想要做的是增加一個字段(注:通過get/set方法不是屬性)傳遞對象沿着一個框架,以查找與特定註釋字段(不是屬性)前。所以「客戶」正在創建我想要注入額外字段的目標類。截獲AOP調用到我想操縱這些對象的服務層。
點(3)假設你的意思攔截類加載器?示例或示例鏈接?點(2)對我來說不起作用,但點(1)看起來像CGLib有某種場截取。在CGLib上查找示例是一個噩夢,所以我不與我的代理服務器上的亞必須是一個接口? – 2012-08-06 12:38:13
如果您在使用它之前知道要加載的類,則可以通過調用'defineClass'來加載它。如果你需要它是動態的,你可以創建自己的ClassLoader來覆蓋findClass。或者你可以使用'Instrumentation'來在不改變類加載器的情況下攔截類加載。大多數工具需要代理才能成爲一個接口,例如'Proxy.newProxyInstance(類加載器,接口,處理器)' – 2012-08-06 12:43:33
實測https://github.com/kreyssel/maven-examples/blob/master/javaagent/src/main/java/org/kreyssel/tools/loggingagent/LoggerAgent。 Java通過代理你可以轉換一個類。你能否在引用類加載器時引導我如何做到這一點? – 2012-08-06 13:01:45