参考答案
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—