EJB上的JavaEE类注释处理

时间:2012-08-10 15:29:41

标签: java-ee annotations ejb

有人可以告诉我如何在受保护或私有方法上处理类注释(如拦截器)?

如果我有这样的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上实现......?

1 个答案:

答案 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