CGLib是否修改了类的所有实例

时间:2013-10-22 07:27:09

标签: java cglib

如果我实现了一些MethodInterceptor,如下所示:

public class HashCodeAlwaysZeroMethodInterceptor implements MethodInterceptor {

  public Object intercept(Object object, Method method, Object[] args,
    MethodProxy methodProxy) throws Throwable {

    if ("hashCode".equals(method.getName())) {

      return 0;
    }

    return methodProxy.invokeSuper(object, args);
  }
}

Object proxy = Enhancer.create(
  Object.class,
  new HashCodeAlwaysZeroMethodInterceptor());

Object的每个实例现在都已增强了吗? IE:如果我这样做:

class foo { foo(){} }
foo myfoo = new foo();
int hash = myfoo.hashCode();
System.io.println(hash); //Prints 0

它确实会打印0吗?

1 个答案:

答案 0 :(得分:0)

来自API DOCS

创建

public static Factory create(java.lang.Class type,
                             Callback callback)
  

创建截取对象的Helper方法。为了更好地控制   生成的实例,使用Enhancer的新实例而不是这个   静态方法。

Parameters:
    type - class to extend or interface to implement
    callback - the callback to use for all methods

从文档中可以看出答案是肯定的