参考答案
Fastclass机制是什么
- CGLIB 是采用 FastClass 机制,实现对被拦截方法的调用的。
- FastClass 机制,是对一个类的方法建立索引,通过索引直接调用相应的方法。
Fastclass机制的代码实例
public class test10 { //这里,tt可以看作目标对象,fc可以看作是代理对象;首先根据代理对象的getIndex方法获取目标方法的索引, //然后再调用代理对象的invoke方法就可以直接调用目标类的方法,避免了反射 public static void main(String[] args){ Test tt = new Test(); Test2 fc = new Test2(); int index = fc.getIndex("f()V"); fc.invoke(index, tt, null); } } class Test{ public void f(){ System.out.println("f method"); } public void g(){ System.out.println("g method"); } } class Test2{ public Object invoke(int index, Object o, Object[] ol){ Test t = (Test) o; switch(index){ case 1: t.f(); return null; case 2: t.g(); return null; } return null; } //这个方法对Test类中的方法建立索引 public int getIndex(String signature){ switch(signature.hashCode()){ case 3078479: return 1; case 3108270: return 2; } return -1; } }
解析:
Test2 是 Test 的 Fastclass,在 Test2 中有两个方法 :getIndex 、invoke。
在 getIndex 方法中,对 Test 的每个方法建立索引,并根据入参(方法名+方法的描述符)来返回相应的索引。
Invoke 根据指定的索引,以 ol 为入参,调用对象 O 的方法,避免反射调用,效率提高了。
以上,是Java面试题【Fastclass机制】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—