文档章节

CDI框架笔记-weld reference中文翻译(四)

equalxx
 equalxx
发布于 2017/04/06 11:54
字数 1580
阅读 7
收藏 0
点赞 0
评论 0

题外话:好久没来更新。工作一忙就一拖再拖了。回顾自己的翻译质量,发现除了我自己可能对它稍有理解以外,大多数人是读着费劲吧- -!!!。还是希望大家自己看文档吧,理解更深刻哦。

近期在脉脉上看到匿名区有人抱怨新人老问问题的事情,底下很多人回复感谢当年入行时的师父,或多提携年轻人积德行善blabla,我不知道是不是因为工作环境的原因,我总能遇到不带思考问别人问题的人。业务方面都好说,自己代码问题不由分说站起来问人,我很反感,明明都能谷歌到的;退一步说,很多问题我也要谷歌才知道,然后再告诉你,为什么你自己不去好好琢磨呢。技术问题多自己解决,也是对自己的一种提高啊,如果对方的工作很大程度依赖于别人,能把工资分我全我来干吗(我是认真的)╮(╯_╰)╭

 

2.1.2 Scope

一个bean的Scope决定了它的实例的生命周期和可见性。CDI上下文模型是可扩展的,可以用来容纳多种scope。一些重要的scope在规范中内置,并且由容器提供。每一个scope都有一个注解修饰。比如说,任何一个web应用都很可能会有session scoped bean:

public @SessionScoped

class ShoppingCart implements Serializable { ... }

 

一个被session scoped修饰的bean会被绑定到用户会话(user session),并且被所有在此会话的上下文中执行的请求共享。

注意:

注意一旦一个bean被绑定到上下文中,它会一直存在上下文中,直到这个上下文被销毁。没有任何手动方法可以从上下文中删除一个bean。如果你不想让bean一直停留在会话中,可以考虑使用生命周期短些的scope,类似request或conversation scope。

 

如果没有明确指定scope,那么bean会归属于一种特殊的scope,这种scope叫做dependent pseudo-scope。属于这种scope的bean只会存活并服务于在自己注入的对象,这意味着它们的生命周期取决于注入对象的生命周期。

 

我们会在Chapter 5 scopes and contexts中讨论更多有关scope的内容。

 

2.1.3. EL name

如果你想在支持EL表达式的非Java代码中引用bean(比如JSP或JSF),你必须得给bean添加一个EL name。

EL name通过@Named注解来定义,如下所示:

public @SessionScoped @Named("cart")

class ShoppingCart implements Serializable { ... }

 

现在我可以轻松地在JSF或JSP页面中使用它:

<h:dataTable value="#{cart.lineItems}" var="item">

...

</h:dataTable>

 

注意:

@Named注解不是用来指定这个类是不是bean的,大多类已经被作为bean来识别。这个@Named注解只用来EL引用bean,最常见就是JSF视图的调用。

 

我们可以不用在Named后面括号里写名称,让CDI自己来指定一个名字,像下面这样:

public @SessionScoped @Named

class ShoppingCart implements Serializable { ... }

 

默认起的名是首字母小写的非限定类名,在上面这个例子里就是shoppingCart。

 

2.1.4 Alternatives

我们已经知道了在开发阶段如何用qualifier区分同一接口的不同实现类。但是有的接口(或其他bean type)他们的实现需要取决于开发环境。比如说,我们可能需要在测试阶段使用一个模拟实现(不同于实际应用场景的实现)。这时可以在类上使用@Alternative注解。

public @Alternative

class MockPaymentProcessor extends PaymentProcessorImpl { ... }

 

我们通常在同一个接口有其他实现类的时候,在实现类上添加@Alternative注解。我们在部署阶段可以通过在jar包或是Java EE模块的META-INF/beans.xml中配置不同的替代实现。不同的部署场景下使用不同的替代方案。

 

我们会在第4.7章节 Alternatives进一步讲解。

 

2.1.5 Interceptor binding types  拦截器绑定类型

你应该比较熟悉在EJB 3中使用拦截器。JavaEE 6以来,这个功能已经可以被其他托管bean使用。也就是说,再也没必要为了一个拦截方法而去创建一个ejb了。那么CDI能在此之上提供什么功能呢?有很多,让我们先来介绍点背景知识。

 

在JavaEE 5中设计的拦截器是有点不科学的。会要求开发者直接在EJB的实现中通过@Interceptors注解或xml配置去实现拦截器。这样造成用户可能直接把拦截器代码放到实现类里了。第二,拦截器调用顺序取决于注解或xml描述中的声明顺序。可能这种方式对于单个bean还不算太糟糕。但是如果你反复使用拦截器,会发生对不同的bean有着不同的拦截器调用顺序。问题就来了。

 

CDI提供了间接层来把拦截器和bean绑定,并进行控制。我们必须定义一种绑定类型来描述一个拦截器的实现。

 

拦截器绑定类型是由用户通过@InterceptorBinding定义的注解。它可以使拦截器类简洁且无直接依赖地绑定到bean类上。

@InterceptorBinding

@Inherited

@Target( { TYPE, METHOD })

@Retention(RUNTIME)

public @interface Transactional {}

 

实现了事务管理的拦截器可以像下面这样声明:

public @Transactional @Interceptor

class TransactionInterceptor { ... }

 

我们可以通过在bean class上标注拦截器绑定类型来实现bean上的拦截:

public @SessionScoped @Transactional

class ShoppingCart implements Serializable { ... }

请注意ShoppingCart和TransactionInterceptor之间没有任何联系。

 

拦截器是部署时指定的。(我们在单元测试时不需要拦截器!)一个拦截器默认为不可用的。我们可以通过jar包或是Java EE 模块的CDI部署描述文件META-INF/bean.xml来使一个拦截器可用,这些文件也可以定义拦截器顺序。

 

我们会在Chapter 9 拦截器以及Chapter 10装饰器中讨论拦截器,以及它的兄弟装饰器。

请尊重成果,如需转载请注明出处,谢谢合作:)https://my.oschina.net/equalxx 

© 著作权归作者所有

共有 人打赏支持
equalxx
粉丝 0
博文 4
码字总数 6235
作品 0
程序员
迷渡:免费的编程中文书籍索引

本文之前发布过,近半年后,本文作者(迷渡,JustJavaC)大幅度进行了更新,因此再次分享给大家。感谢 @justjavac 和众多的分享者!感谢写作这些文档、手册的人们! 语言无关类 操作系统 开源...

山哥 ⋅ 2015/01/22 ⋅ 4

Weld 2.3.5.Final 发布,Java 依赖注入框架

Weld 2.3.5.Final 发布了,本次发布增强 API,新增一些新特性,预计在Weld 2.4将移除CDI 1.2。 主要改进记录如下: fixed static disposer method invocation (WELD-2176) fixed private ob...

oschina ⋅ 2016/07/02 ⋅ 1

免费的编程中文书籍索引【收藏速度】

语言无关类 优质博客 PyTab在线手册中心 ImportNew 廖雪峰的官方网站 程序员博客墙 操作系统 开源世界旅行手册 鸟哥的Linux私房菜 Linux 系统高级编程 The Linux Command Line (中英文版) L...

yonghu86 ⋅ 2015/04/15 ⋅ 0

编程类开放书籍荟萃(转载)

关于开源图书有人在网络上做了大量整理,本文为大家刊载《免费的编程中文书籍索引》 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程...

行者PHPer ⋅ 2016/10/09 ⋅ 0

Fanta/free-programming-books-zh_CN

免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版...

Fanta ⋅ 2016/11/14 ⋅ 0

开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技 ⋅ 2017/12/11 ⋅ 0

IT 技术数据&翻译 目录整理--Awesome-IT-Books

Awesome-IT-Books 本目录旨在集合各个优秀IT书籍&API翻译&官方Docs翻译。 这个仓库不产出书籍,只是将网上流传着的书籍&书籍翻译集合在一起,供大家检索学习。 在此先感谢那些为我们提供书籍...

charchen ⋅ 2017/04/25 ⋅ 1

Weld 2.0.0.Final 发布,CDI 规范实现

我很高兴的宣布 Weld 2.0.0 正式版发布了,这是 CDI 1.1 规范实现。该规范实现很快将提供 FlassFish 4 和 WildFly (前身是 JBoss AS) 的版本。 相关链接: [ 分发版 (Weld, CDI TCK)] [ 文档...

小编辑 ⋅ 2013/04/26 ⋅ 2

免费的编程中文书籍索引

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

modernizr ⋅ 2014/04/08 ⋅ 24

免费的计算机编程类中文书籍

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

justjavac ⋅ 2014/08/13 ⋅ 10

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部