CDI进阶第九步 模板注解

本文介绍了如何使用CDI的模板注解功能来简化代码,通过@Stereotype将多个注解合并成一个自定义注解。以@SessionScoped和@Named为例,展示了创建和使用自定义注解的步骤,并验证了其在session作用域中的正确应用。
摘要由CSDN通过智能技术生成

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

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

比如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;
 
@SessionModel
public 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;
 
	@Inject
	private HelloBean bean;
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().append(bean.toString());
	}
 
}

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值