-- 简介
CDI - Context Dependency Injection 上下文依赖注入:Java EE 6中定义的规范标准,编号:JSR-299。定义了一系列简化Java开发的功能。CDI已经超出一个框架的定义,升华到一种开发模型。这个开发模型不会去限制你必须将代码分为几层,不限制你必须写ORM、持久化、业务代码等,甚至不限制你到底是开发WEB程序还是客户端程序。
CDI的思想来源于几个开源项目:Seam、Guice、Spring However。不过CDI在集合了这几个框架的有点之外,克服了各自的缺点。
CDI只是一个标准(Java Community Process - JCP),不是一个具体的框架,不同的应用服务器有其自己的实现,比如JBoss AS的CDI名叫Weld。
-- 注入
既然名称叫做上下文依赖注入,那么首先看看到底是怎么注入的。
-- 往哪里注入(3种)
1 public class Checkout {
2 private final ShoppingCart cart;
3
4 @Inject
5 public Checkout(ShoppingCart cart) {
6 this.cart = cart;
7 }
8 }
↑ 注入到构造方法。一个类只能有一个注入的构造方法
1 public class Checkout {
2 private ShoppingCart cart;
3
4 @Inject
5 void setShoppingCart(ShoppingCart cart) {
6 this.cart = cart;
7 }
8 }
1 public class Checkout {
2 private @Inject ShoppingCart cart;
3 }
↑ 注入到类属性。不需要getter与setter!
-- 注入的顺序:
1)构造方法
2)类属性
3)方法注入
4)@PostConstruct
-- 会话范围
1)@RequestScoped
2)@SessionScoped
3)@ApplicationScoped
4)@ConversationScoped
前三种可以在任何servlet中使用,conversation只能在JSF中使用。