有人可以告诉我如何在受保护或私有方法上处理类注释(如拦截器)?
如果我有这样的EJB:
@Stateless
@Interceptors({ SomeInterceptor.class })
public class ContactBean implements ContactLocal {
@Override
public void doSomethingWithPublicMethod(final Long id) {
return doSomething(id)
}
ContactEntity doSomething(final Long id){
doSomethingPrivate(id);
}
private doSomethingPrivate(final Long id){
...
}
Interceptor是否在所有方法上调用,只是标记为@Override的那些(无法理解为什么应该这样做)或者是否还有其他规则?我正在快速扫描Java EE教程,但找不到任何描述它的东西。可能是容器了吗?
所以我假设我应该在接口上拥有所有拦截器,事务等,如果我想让它们仅用于实现接口的方法,那么就不要在Bean上实现......?
答案 0 :(得分:3)
只有在通过代理进行调用时才会处理托管bean(如EJB bean)上的注释。换句话说,来自豆子外面。
在Java中,不能(轻松)修饰隐式this
变量。当您从doSomethingWithPublicMethod
方法调用默认和私有方法时,不会对这些方法进行拦截。
同样,如果使用@RunAs
或@Asynchronous
单独注释这些方法,那么这些方法也不会被处理。
Adam Bien在他的博客中更详细地解释了这一点:http://www.adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb