JavaEEのインターセプターを有効にする方法について
インターセプターが有効になっていないなーと思ったら、Priorityアノテーションを忘れていました。
調べるとbeans.xmlで設定する方法もあるようで、違いはなんだろうと思ったのですけど、特にないようですね。
beans.xmlで定義するとソースコードを修正せずに有効にできたり無効にしたりできる程度ですね。
方法は2つあります
- interceptorに@Priorityアノテーションをつける
- beans.xmlにinterceptorを定義する
1. Interceptorに@Priorityアノテーションをつけるサンプル
TraceLogInterceptor.java
package sample;
@InterceptorBinding
@Target({Element.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TraceLogInterceptor {
}
TraceLogImpl.java
package sample;
@Priority(Interceptor.Priority.APPLICATION)
@TraceLogInterceptor
@Interceptor
public class TraceLogImpl {
}
2. beans.xmlにInterceptorを定義するサンプル
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
bean-discovery-mode="annotated">
<interceptors>
<class>sample.TraceLogInterceptor</class>
</interceptors>
</beans>