- Developing Middleware in Java EE 8
- Abdalla Mahmoud
- 280字
- 2021-07-23 19:24:35
Interceptor types
One of the interesting features in CDI is that we can introduce interceptors using qualifiers. Let's define one interceptor called LoggedInterceptor, which is supposed to perform logging functionalities on a big set of CDI beans in some enterprise application:
@Interceptor @Logged public class LoggedInterceptor { @AroundInvoke public Object interceptMethod(InvocationContext ctx) throws Exception { Object retValue = ctx.proceed(); return "intercepted " + retValue; } }
Note that in this example, we have annotated the interceptor with the @Logged annotation. This is a qualifier annotation that we will define as shown earlier, in the Using qualifiers section, as follows:
@InterceptorBinding @Target({TYPE, METHOD}) @Retention(RUNTIME) public @interface Logged { }
By annotating LoggedInterceptor with the qualifier @Logged, we can later annotate any CDI bean with the @Logged qualifier, to tell the container that we wish to use the LoggedInterceptor with that CDI bean, as follows:
@Dependent @Logged public class MyPojo { ... }
This is equivalent to the previous example, where we annotated MyPojo with the @Interceptors annotation. However, by using the qualifier rather than the interceptor class itself, we have abstracted MyPojo from the real interceptor implementation, and thus we can later alter this class type, or replace it among deployment modes (production or testing).
All CDI interceptors defined in this way are disabled by default. To make them enabled, you should define a WEB-INF/beans.xml file as the final step, with the following XML code:
<?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_1_1.xsd" bean-discovery-mode="annotated"> <interceptors> <class>com.example6.LoggedInterceptor</class> </interceptors> </beans>
We can also apply qualified interceptors on singular methods as follows:
@Dependent public class MyPojo { @Logged public String getMessage1() { return "MyPojo first message!"; } ... }
- 從零開始:數(shù)字圖像處理的編程基礎與應用
- Microsoft Dynamics 365 Extensions Cookbook
- 精通搜索分析
- Java開發(fā)入行真功夫
- 新編Premiere Pro CC從入門到精通
- Learning Salesforce Einstein
- Python全棧數(shù)據(jù)工程師養(yǎng)成攻略(視頻講解版)
- Extreme C
- Unreal Engine Game Development Cookbook
- Learning ROS for Robotics Programming
- Learning Redis
- 微信公眾平臺服務號開發(fā):揭秘九大高級接口
- Python大數(shù)據(jù)與機器學習實戰(zhàn)
- 15天學會JavaScript(視頻教學版)
- C# 4.0權威指南