Bill Bendrot 2010年6月
- JEE的长期挑战
- 我有一个解决方案,但是……
- CDI是什么?
- Weld
- Seam 3
- Servlet上下文模型太粗。
- 不能反映现实世界的用法。
- Seam提出:
- 转变任何东西为一个“组件”。
- 一类“东西”。
- 引入双向注入。
- 使依赖注入为有状态的和动态的。
- 结合了JSF和EJB。
- 增加了对话上下文和业务流程上下文。
- 转变任何东西为一个“组件”。
- 但是,Seam仍然是非JEE 的。
- JSR-299 —— 用于JEE的上下文和依赖注入。
- JEE6的核心部分。
- 帮助统一bean模型。
- 明确定义的上下文,可以绑定有状态bean给它们,并管理生命周期。
- 增加依赖注入给JEE,并使它成为类型安全。
- 引入了一个事件通知系统。
- 使用拦截器,鼓励松耦合。
- 重新定义拦截器为装饰器,用于细粒度控制。
- 集成统一的EL,桥接JSF。
- 引入了一个SPI,扩展JEE —— 走向自己的JEE7!
- 规范 —— JSR-299 —— CDI
- 也集成了JSR-330的元素
- 参考实现 —— Weld
- TCK —— 技术兼容工具包
- 实现 —— Seam 3
- TCK —— 技术兼容工具包
- 参考实现 —— Weld
- 也集成了JSR-330的元素
- 开始使用WebBeans。
- 更多涉及“Web”,而少涉及“Beans”。
- 规范改为CDI。
- 参考实现最初称为 WebBeans。
- 委员会异议。
- 参考实现最命名为Weld。
- 当谷歌搜索信息时,你仍然会看见提及到“WebBeans”,并且甚至在规范的文件名仍然是“WebBeans”。
- 任何被容器管理的组件都是一个Bean。
- 管理Bean建立的基本规范。
- 拦截器
- 生命周期回调
- 资源注入
- 在JEE6及之后中,其他的规范建立在这个基础之上。
- CDI
- EJB
- 等等……
- CDI增加以下内容到管理Bean的服务:
- 自动发现
- 通过beans.xml选择加入
- Bean类型
- 有一个“家族”的bean类型的能力:
- Qualifiers (在设计时选择)
- Alternatives(在部署时选择)
- Producers(在运行时选择)
- 自动发现
- 域的通告和联接
- EL名字(可选的)
- 直接暴露bean给JSFs或JSPs
- 拦截器绑定
- 多请求,少会话
- 存在于一个JSF用例的时间长短
- Conversation.start()
- Conversation.end();
-
@Dependent
-
@RequestScoped
-
@SessionScoped
-
@ApplicationScoped
-
@ConversationScoped
-
注入现在是基于类型
-
- Annotation
- Type
- Type Params
- 消除了基于名字/字符串的注入
-
Motorcycle
-
Vehicle
-
Wheel<TwoWheel>
-
@Motocross
@Qualifier@Retention(RUNTIME)@Target ({TYPE, METHOD, FIELD})public @interface Motocross { }
<alternatives><class>org.jbossmotors.mock.TestBike</class></alternatives>
@ApplicationScopedpublic class RandomNumberGenerator {private Random random =new Random(System.currentTimeMillis());@Produces @Named @Random int getRandomNumber() {return random.nextInt(100);}}
- 统一的EL暴露管理的Beans给JSF和JSP视图。
- 所有需要的一切是 @Named注释。
- 大多数资源是可注入的:
- 管理的Beans
- 网页服务参考
- 本地或远程EJBs
- 生产者创建的对象
- 等等
- CDI参考实现。
- “普通(Vanilla)” CDI
- CDI实现是在JBoss AS 6 和GlassFish 3 中。
- 但是也支持Tomcat和Jetty,甚至也支持JavaSE
- 被maven化。
- 提供扩展的基础。
- Weld 扩展是用于扩展核心。
- 现在,Seam在核心利用CDI被模块化。
- 模块有一个独立发行的周期。
- 普通的快照/包装发行。
- Seam堆栈由以下内容构成:
- Java EE集成在平台内部。
- 声明性安全。
- 页面流(jPDL)和业务流程(jBPM)。
- JavaScrip远程处理。
- “渲染” e-mail, 图形, PDF, 和 XLS
- Spring集成,等等。
- 工具化。
- Seam 3 = Java EE的可移动扩展。
- 构建在CDI 基础的顶部。
- 现在以模块方式组织。
- 已改变的注释。
- @In 现在为 @Inject, @Name 现在为 @Named。
- @ScopeType 由域注释替换 —— @RequestScope 。
- @Begin/@End 调用对话接口,现在为了—— Conversation.begin() 。
- 一些概念/实现被取代。
- Outjection(注出)—— 不是注出某些东西到域内部,而是确保你正在从该域中读取。
- 此外,可使用更安全的生产者字段(Producer Fields)替代。
- 工厂(Factories) —— 来自生产者方法的更安全的结果。
- Outjection(注出)—— 不是注出某些东西到域内部,而是确保你正在从该域中读取。
- http://www.seamframework.org
- 下载
- 文档
- 论坛和社区
- 投稿
- JSR-299 —— 引入了一个灵活的JEE 服务集合:
- 强壮类型的管理的Beans。
- 上下文。
- 动态的依赖注入。
- 多渠道的松耦合。
- 可扩展的SPI。
- Weld是 CDI的参考实现,并且在JBoss 6 和 GlassFish3 中被实现。
- 可以被添加到Tomcat, Jetty。
- Seam 3 —— JEE的可移动扩展(通过CDI)
39万+


:Weld, Seam 3及之后&spm=1001.2101.3001.11974&articleId=6310213&d=1&t=3&u=20b8a633616d40b28e6a98123607e220)

被折叠的 条评论
为什么被折叠?



