Guice合成方法警告

5
我们正在使用Guice及其AOP支持。我们有两个第三方模块使用了AOP支持:Shiro和Guice的JPA模块。结果是Guice抱怨“该方法可能被拦截两次”。 我的问题是如何避免这种行为:我可能根本不需要拦截合成方法。 如果这些模块是我们自己的,我们可以添加一个匹配器来过滤所有合成方法(就像这里所说的那样),但问题是这些是第三方模块。
1个回答

12

我能找到的最好方法如下:只需像这样覆盖bindInterceptor方法。

匹配器:

public final class NoSyntheticMethodMatcher extends AbstractMatcher<Method> {
    public static final NoSyntheticMethodMatcher INSTANCE = new NoSyntheticMethodMatcher();
    private NoSyntheticMethodMatcher() {}

    @Override
    public boolean matches(Method method) {
        return !method.isSynthetic();
    }
}

bindInterceptor方法:

@Override
protected void bindInterceptor(Matcher<? super Class<?>> classMatcher, Matcher<? super Method> methodMatcher, MethodInterceptor... interceptors) {
    super.bindInterceptor(classMatcher, NoSyntheticMethodMatcher.INSTANCE.and(methodMatcher), interceptors);
}

但是这个解决方案并不总是有效的。就像在我的情况中,目标JpaPersistModule是final的,我唯一能覆盖此方法的方式是复制粘贴实现。

但是,该解决方案并不总是可行的。就像我的情况一样,目标JpaPersistModule是final的,我唯一能够覆盖该方法的方式是复制并粘贴实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接