<分区>
我正在使用 CDI 拦截器,我意识到只有用 @Interceptor 注释的类中的第一个方法调用会被拦截。在下面的示例中,方法 B 永远不会被拦截。
@InterceptorBinding
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Transactional {
}
@Transactional
@Interceptor
public class TransactionsInterceptor {
@AroundInvoke
public Object transactionInterceptor(InvocationContext context) throws Exception {
System.out.println("Method="+context.getMethod().getName());
return context.proceed();
}
}
public Interface AnImportantInterface {
public void methodA();
public void methodB();
}
@Transactional
@ThreadScoped
public class AnImportantClass implements AnImportantInterface {
public void methodA() {
methodB();
}
public void methodB() {
//This method is never intercepted
}
}
public class AnotherImportantClass {
@Inject AnImportantInterface aui;
public void someMethod() {
aui.methodA();
}
}
如果先调用methodA,如何实现methodB被拦截?有什么解决方法吗?