Expression language
表达式语言(也称为EL),它提供了一种重要的机制,使表示层(网页)能够与应用程序逻辑(托管bean)进行通信。EL由几种JavaEE技术使用,例如JavaServer Faces技术,JavaServer Pages(JSP)技术以及Java EE的上下文和依赖注入(CDI)。EL也可用于独立环境。本章仅介绍在Java EE容器中使用EL的过程。
EL提供了一种使用简单表达式来执行以下任务的方法:
动态读取存储在JavaBeans组件,各种数据结构和隐式对象中的应用程序数据
动态地将数据(例如用户输入到表单)写入JavaBeans组件
调用任意静态和公共方法
动态执行算术,布尔和字符串操作
动态构造集合对象并对集合执行操作
在JavaServer Faces页面中,EL表达式可以在静态文本中使用,也可以在自定义标记或标准操作的属性中使用。
最后,EL提供了一个可插入的API来解析表达式,以便可以实现可以处理EL尚未支持的表达式的自定义解析器。
Decorators
一个装饰实现一个或多个bean类型,并截取其中实现这些豆种豆的业务方法调用。这些bean类型称为装饰类型。
装饰器在表面上类似于拦截器,但由于它们直接用业务语义实现操作,因此它们能够实现业务逻辑,相反,无法实现拦截器优化的交叉关注点。
装饰器可以与任何托管bean相关联,托管bean本身不是拦截器或装饰器,也不与任何EJB会话bean相关联。装饰器实例是它装饰的对象的依赖对象。
装饰器是托管bean。装饰器的装饰类型集包括托管bean的所有bean类型,它们是Java接口,java.io.Serializable除外。装饰器bean类及其超类不是装饰器的装饰类型。装饰者类可以是抽象的。
会话bean的装饰器必须符合EJB规范定义的bean提供程序编程限制。有状态会话bean的装饰器必须遵守EJB规范定义的钝化和会话状态的规则。
Interceptors
拦截器是用来在插方法调用或出现在相关联的目标类的生命周期事件的类。拦截器执行任务,例如日志记录或审计,这些任务与应用程序的业务逻辑分开,并且经常在应用程序中重复。这些任务通常被称为跨领域任务。拦截器允许您在一个位置指定这些任务的代码,以便于维护。当拦截器首次引入Java EE平台时,它们特定于企业bean。在Java EE 7平台上,您可以将它们与所有类型的Java EE托管对象一起使用,包括托管bean。
Producer
生产者方法让我们克服了当容器而不是应用程序负责实例化对象时产生的某些限制。它们也是将不是bean的对象集成到CDI环境中的最简单方法。
根据规格:
生成器方法充当要注入的对象的源,其中:
要注入的对象不需要是bean的实例,
要注入的对象的具体类型可能在运行时或
对象需要一些不是由bean构造函数执行的自定义初始化
例如,生产者方法让我们:
将JPA实体暴露为bean,
将任何JDK类暴露为bean,
为同一个实现类定义多个bean,具有不同的作用域或初始化,或者
在运行时改变bean类型的实现。