有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java方法委派和添加字段

我试图实现方法委托,还通过委托所有setter来添加一个字段来跟踪类中的脏字段。我的类实例化如下所示:

        T t = new ByteBuddy()
            .subclass (typeClass)
            .defineField ("dirtyFields", List.class, Visibility.PUBLIC)
    .method(ElementMatchers.isSetter())
        .intercept(MethodDelegation.to(SetterInterceptor.class))
            .make ()
            .load (SetterInterceptor.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
            .getLoaded ()
            .newInstance();

    List<String> l = new ArrayList<String> ();
    t.getClass().getField("dirtyFields").set(t, l);
    l.add("foobar");

    return t;

我的拦截器是这样的:

  @RuntimeType
  public static Object intercept(@SuperCall Callable<?> superMethod, @Origin Method method, @Super(proxyType = TargetType.class) Object delegate) throws Exception {
    System.out.println ("---- Intercept");
    markDirty (delegate, Character.toLowerCase (method.getName ().charAt(3)) + method.getName().substring(4));
    return superMethod.call();
  }

然而,我无法获取setter正在被调用的“对象”,并且委托似乎没有引用该对象。我想知道我是否需要做些什么,或者可以注入一些东西来提供这种能力

谢谢


共 (1) 个答案

  1. # 1 楼答案

    我通过将@This注入拦截器来回答自己的问题:

      public static Object intercept(@This Object thiz, @SuperCall Callable<?> superMethod, @Origin Method method, @Super(proxyType = TargetType.class) Object delegate) throws Exception {