0
代碼位於Scala中,但希望Java程序員也能理解。CGLIB的類生成和增強功能
我有以下類:
class SampleClass {
def test(in: String) = "Hello world!"
}
我有以下代碼創建這個類的一個增強的實例:
val e = new Enhancer
e.setSuperclass(classOf[SampleClass])
e.setCallback(new Cb)
println(e.create.asInstanceOf[SampleClass].test("foo"))
回調函數如下:
class Cb extends MethodInterceptor {
override def intercept(obj: Any, m: Method, args: Array[Object], proxy: MethodProxy): Object = {
println(s"$m is called: ${m.getName}")
proxy.invokeSuper(obj, args)
}
}
這工作正常。現在,如果我不是嘗試創建一個類,然後它的一個新的實例,所有的方法都直接調用,繞過回調:
val e = new Enhancer
e.setSuperclass(classOf[SampleClass])
e.setCallbackType(classOf[Cb])
println(e.createClass.newInstance.asInstanceOf[SampleClass].test("foo"))
爲什麼會這樣?如何創建java.lang.Class
並使用其newInstance()
方法生成增強對象?