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 实现上,如果我想让它们只在实现接口的方法上工作......?

4

1 回答 1

3

仅在通过代理进行调用时才处理托管 bean(如 EJB bean)上的注释。换句话说,从豆子外面。

在 Java 中,不可能(很容易)装饰隐式this变量。当您从该doSomethingWithPublicMethod方法调用您的默认和私有方法时,不会对这些方法进行拦截。

同样,如果这些方法单独使用 say@RunAs或进行注释@Asynchronous,那么这些方法也不会被处理。

Adam Bien 在他的博客中更详细地解释了这一点:http: //www.adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb

于 2012-08-10T21:27:46.177 回答