JavaEE中EJB的类注解处理

3

请问有人能告诉我如何处理保护或私有方法上的类注释(例如拦截器)吗?

如果我有这样一个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){
    ...
}

拦截器是否在所有方法上调用,只是标记为@Override的方法(我看不出为什么应该这样做),还是有其他规则?我正在快速扫描Java EE教程,但找不到任何描述。也许由容器决定吗?
所以我认为如果我想让拦截器、事务等仅在实现接口的方法上工作,我应该将它们全部放在接口上,而不是放在Bean实现上...?
1个回答

3
仅当通过代理进行调用时,托管 Bean(如 EJB)上的注释才会被处理。换句话说,从 Bean 外部调用。
在 Java 中,不容易地装饰隐式的“this”变量。当您从“doSomethingWithPublicMethod”方法调用默认和私有方法时,这些方法将不会被拦截。
同样,如果这些方法被单独注释为“@RunAs”或“@Asynchronous”,则这些方法也不会被处理。
Adam Bien 在他的博客中详细解释了这一点:http://www.adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb

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