2012年2月2日星期四

NetBeans_013:开发JavaEE 6 应用之十三:使用CDI Interceptors

1. 右键项目,选择新建,选择上下文和依赖注入,选择拦截器绑定类型

设置拦截器名称和位置:

完成后,生成的代码如下:
@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface Logging {
}

@Interceptor
@Logging
public class LoggingInterceptor {

    @AroundInvoke
    public Object intercept(InvocationContext context) throws Exception {
        System.out.println("%%%%% BEFORE: " + context.getMethod());
        Object result = context.proceed();
        System.out.println("%%%%% AFTER: " + context.getMethod());
        return result;
    }
}

LoggingInterceptor类说明:
(1)@Logging是拦截器的名称。
(2)@Interceptor表明LoggingInterceptor类是拦截器的实现。
(3)@AroundInvoke表明该拦截器的使用方式是标注在方法上。
(4)参数InvocationContext

2. 把拦截器注册到beans.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    <interceptors>
        <class>org.glassfish.samples.LoggingInterceptor</class>
    </interceptors>
</beans>

3. 在CustomerSessionBean中的方法getCustomers2上加标注:@Logging
这就表明拦截器Logging将在getCustomers2方法上作用。
每次调用getCustomers2方法之前和之后会打印LOG。

没有评论: