CDI进阶第二步 自定义注解拦截器
来源:互联网 发布:linux文件管理命令 编辑:程序博客网 时间:2024/05/16 08:26
CDI进阶第二步 自定义注解拦截器
上一步讲到了拦截器,我们的配置是这样的,加注解@Interceptors({Interceptor1.class,...})。这样确实烦啊。
幸好J2EE提供了这样一种机制,自定义注解。
写起来就是这样的,比如自定义的注解为@Hello,就可以直接在类上加@Hello注解。在类上加注解是拦截所有方法,只在方法上加,就仅仅会拦截这一个方法。
自定义注解,需要了解的技术点很少
1 @InterceptorBinding注解,这个注解是加在你的自定义注解上的。
2 beans.xml配置文件,这个配置文件位于WEB项目的WEB-INF下面。
首先看看自定义注解的代码。
package com.rschy.cdiannotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.interceptor.InterceptorBinding;
@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface Hello {
}
可以看到在自定义注解中,并不能看到你的自定义注解绑定了哪个拦截器。
所以说还需要配置,在看看拦截器的代码
package com.rschy.cdiannotation;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
@Hello
@Interceptor
public class HelloInterceptor {
@AroundInvoke
public Object process(InvocationContext context) {
try {
return "Hello, " + context.proceed();
} catch (Exception e) {
return null;
}
}
}
可以看到这个拦截器上面加了注解,貌似是和我们自定义的注解绑定起来了。然并卵。It doesn’t work. 还需要在Beans.xml中进行配置。
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<interceptors>
<class>com.rschy.cdiannotation.HelloInterceptor</class>
</interceptors>
</beans>
到了这一步就真正可以自由使用自定义注解了。
package com.rschy.cdiannotation;
import javax.enterprise.context.RequestScoped;
@RequestScoped
@Hello
public class HelloBean {
public String greeting(){
return "world!";
}
}
最后我们在servlet中调用它。
package com.rschy.cdiannotation;
import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello.html")
public class HelloServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Inject
private HelloBean helloBean;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().append(helloBean.greeting());
}
}
运行一下,可以看到预期的结果了:
- CDI进阶第二步 自定义注解拦截器
- CDI进阶第四步 自定义注解验证
- CDI进阶第三步 CDI验证器
- CDI进阶第一步 CDI拦截器
- CDI进阶第九步 模板注解
- CDI技术第六步:自定义选择器注解
- CDI进阶第五步 CDI事件
- CDI进阶第六步 CDI装饰模式
- CDI进阶第八步 CDI初始化与销毁事件
- CDI进阶第七步 注入内置对象
- CDI进阶第十步 查找上下文
- CDI学习第二步,BEAN作用域
- SpringMVC利用拦截器拦截自定义注解
- 自定义注解,实现拦截器
- CDI技术第八步 动态CDI BEAN
- spring 拦截器 spring自定义注解
- 自定义注解+拦截器实现权限控制
- struts2自定义拦截器注解配置方法
- cisco收购的企业列表
- 关于sql中的按年月日分组
- [Java] eclipse 导出jar包
- Android:控件WebView显示网页
- UICollectionView 简单使用详解
- CDI进阶第二步 自定义注解拦截器
- C#中HashTable的用法
- Redis的java客户端Jedis的基本操作
- display与visibility
- mysql 启动,停止,重启
- php的sleep(10)引起阻塞
- C++,C中struct的区别,及class
- multiscatter for max2010/2012
- 混合高斯模型