3

Can someone tell me how Class Annotations (like Interceptor) are processed on protected or private Methods?

If I have an EJB like this:

@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){
    ...
}

Is the Interceptor called on all Methods, just the ones that are marked as @Override (couldn't see why it should do that) or is there any other rule? I was scanning the Java EE tutorial real quick but can't find anything describing that. May it be up to the container?

So I assume I should have all my Interceptors, Transactions etc. on the Interface and never on the Bean implementation if I want to have them working only on methods that implement the interface...?

4

1 に答える 1

3

管理対象Bean(EJB Beanなど)のアノテーションは、プロキシを介して呼び出しが行われた場合にのみ処理されます。言い換えれば、豆の外から。

thisJavaでは、暗黙の変数を(簡単に)装飾することはできません。メソッドからデフォルトメソッドとプライベートメソッドを呼び出すと、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 に答える