我的代码中有一个方法testFoo
,如下所示:
newClassBuilder = newClassBuilder.method(ElementMatchers.nameStartsWith("test"))
.intercept(MethodDelegation.to(new InstMethodsInter(new MethodInterceptor1())));
newClassBuilder = newClassBuilder.method(ElementMatchers.named("testFoo"))
.intercept(MethodDelegation.to(new InstMethodsInter(new MethodInterceptor2())));
newClassBuilder = newClassBuilder.method(ElementMatchers.nameEndsWith("Foo"))
.intercept(MethodDelegation.to(new InstMethodsInter(new MethodInterceptor3())));
只有MethodInterceptor3可以工作 我有很多拦截器。 我需要做什么?
答案 0 :(得分:0)
你必须自己添加一个最具体的匹配器并自己指定拦截器:
newClassBuilder.method(ElementMatchers.nameStartsWith("test").and(ElementMatchers.named("testFoo"))
.intercept(MethodDelegation.to(new InstMethodsInter(new MethodInterceptor1()).andThen(MethodDelegation.to(InstMethodsInter(new MethodInterceptor2()))));
这是必要的,因为后面的匹配器会覆盖任何以前匹配方法的匹配器。最具体的匹配器需要最后应用,并且拦截器不会堆叠。
但是,您似乎应该在此处重构您的拦截逻辑,以使其不必要。