CDI进阶第九步 模板注解

来源:互联网 发布:上海关键词优化公司 编辑:程序博客网 时间:2024/06/04 18:46

模板就是利用现有的注解去开发新的注解。

比如一个类上面加了太多注解,很烦,这时候可以合并为一个注解。

比如CDI自带的@Model注解,其实就是合并了@RequestScoped注解和@Named注解

那么我们也可以定义一个注解来合并@SessionScoped@Named

其实开发步骤很简单

在你的自定义注解上加上@Stereotype注解,然后在这个注解上加上你要合并的注解。

比如我把@SessionScoped@Named合并一下,自己开发一个注解,如以下代码:

package com.rschy.cdistere; import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.ElementType.TYPE;import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target; import javax.enterprise.context.SessionScoped;import javax.enterprise.inject.Stereotype;import javax.inject.Named; @Named@SessionScoped@Documented@Stereotype@Target({ TYPE, METHOD, FIELD })@Retention(RUNTIME)public @interface SessionModel {}

然后就用起这个自定义注解啦

package com.rschy.cdistere; import java.io.Serializable; @SessionModelpublic class HelloBean implements Serializable{private static final long serialVersionUID = 1L; public String say(){return "HELLO WORLD!";}}
写个简单的servlet调用一下

package com.rschy.cdistere;  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; @Injectprivate HelloBean bean; @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().append(bean.toString());} }

在浏览器试了下,无论怎么刷新都是同样的结果。这说明就是session作用域的对象了。

 

0 0
原创粉丝点击