JDK动态代理
通过java.lang.reflect.Proxy
可以实现动态代理,但是这种方式只能作用于接口,如果一个类没有接口则无法实现动态代理。
1 2 3 4 5 6 7 8 9 10 11 12 13
| val delegate = InterfaceImpl() val proxy = Proxy.newProxyInstance(Interface::class.java.classLoader, arrayOf(Interface::class.java) ) { proxy, method, args -> if (method.name == "testMethod") { } if (args != null) { method.invoke(delegate, *args) } else { method.invoke(delegate) } } as Interface
|
CGLIB实现动态代理
CGLIB通过动态生成一个代理类的子类来提供代理。但是对于final方法,是无法实现代理的。
参考
CGLIB(Code Generation Library) 介绍与原理
动态代理底层实现