CDI技术第五步,选择注入的实现类
来源:互联网 发布:mac 创建快捷方式 编辑:程序博客网 时间:2024/05/16 08:35
CDI技术第五步,使用选择器
我们开发过程中往往会遇到这样一个场景。就是对于一个接口,我们写了多个实现类,但是毫无疑问,我们只能使用一个实现类。
那么这个怎么实现呢?
这就需要两个个注解了。
@Default注解与@Any注解
比如我写一个接口。
package cdiscope.bean;
public interface InfoService {
String info();
}
我再写三个实现类,英法两种语言的实现。
下面是英文的实现:
package cdiscope.bean;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Any;
@Any
@RequestScoped
public class EnglishInfoService implements InfoService {
@Override
public String info() {
return "Hello";
}
}
这里使用@Any注解,表示是一个备用的,优先级比较低的实现类。需要注意的是如果不加@Any注解,它默认是认为带了@Default注解的。
package cdiscope.bean;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Default;
@RequestScoped
@Default
public class FranchInfoService implements InfoService {
@Override
public String info() {
return "Bonjour";
}
}
这里加了@Default注解,表示是正在使用的方案。
最后我们写个servlet,来试试水。
package cdiscope.web;
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;
import cdiscope.bean.InfoService;
@WebServlet("/info.html")
public class InfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject private InfoService service;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().append(service.info()).append(", Han Meimei!");
}
}
在浏览器看一看
可以看到,成功地使用了法语的实现类。
但是这样过于麻烦了啊。假如我有多个实现类呢?
对于这个问题可以用自定义注解来做,那么请看下一章。
- CDI技术第五步,选择注入的实现类
- CDI技术第九步 构造注入与setter注入
- CDI进阶第五步 CDI事件
- CDI技术第八步 动态CDI BEAN
- CDI进阶第七步 注入内置对象
- CDI技术第三步,对话作用域
- CDI技术第六步:自定义选择器注解
- CDI技术第七步 生命周期管理
- REST技术第五步 @FormParam的使用
- CDI技术第十步 给Bean取名字
- @Inject注解来实现Java EE CDI方式的依赖注入。
- CDI进阶第三步 CDI验证器
- CDI进阶第六步 CDI装饰模式
- DWR不能得到CDI注入bean的一个解决办法
- CDI技术第四步,依赖作用域与作用域总结
- CDI进阶第八步 CDI初始化与销毁事件
- 基于组件的编程CDI技术(概述)
- CDI系列学习--CDI注入深入理解(结合FacesContext)
- springmvc配置
- Angularjs全局警告框
- XSSFWookbook添加单元格样式
- jquery this与$this的区别
- 安装主控许可证时提示无法验证登陆的用户
- CDI技术第五步,选择注入的实现类
- iOS开发知识概览
- 微信红包接口集成流程
- 【FLASH自制游戏】轮之数袭
- NSSet和NSArry的区别&NSSet的一般用法
- DrawerLayout实现的简易的侧滑效果
- mod_callcenter坐席不显示来电号码
- C语言学习之关键字第九讲
- 优化Android Studio/Gradle构建