SeamFramework.orgCommunity Documentation
The Web Beans (JSR-299)规范为Java EE环境定义了一套服务以便开发者能够更轻松地开发应用。Web Beans在现有的包括JavaBeans和企业JavaBeans在内的Java组件类型之上增强了生命周期和交互的模型层。作为传统的Java EE编程模型的补充,Web Beans服务提供了:
一个为有状态组件而改良的并且绑定到定义明确的 上下文上的生命周期,
一个类型安全的依赖注入方法,
通过 事件通知 机制实现的交互,并且
一个更好的将拦截器绑定到组件上的方法,同时提供了一个名为装饰器(decorator)的新型拦截器,这种拦截器更加适合解决业务问题。
依赖注入和具备上下文的生命周期管理节省了开发者出于对接口的不熟悉而不得不处理下列问题所浪费时间:
这个对象的生命周期是什么?
它能够有多少个并发的客户端
它是多线程的么?
我能从哪里得到一个对象?
我需要显式地销毁它么?
当我不再直接使用它的时候,我需要将它的引用保存到哪里?
我如何才能添加一个间接层,以便在部署的时候可以更换这个对象的不同实现?
我应该如何在其他对象中共享这个对象?
一个Web Bean仅仅需要指定它所依赖的其他Web Bean的类型和语义。它不需要知道他所依赖的任何Web Bean的实际生命周期,具体的实现,线程模型或者这个Web Bean的其他客户端。更棒的是,它所依赖的Web Bean的具体实现和生命周期,线程模型可以根据部署场景而更改,却丝毫不影响任何客户端。
事件,拦截器和装饰器增强了这个模型固有的松耦合特性:
事件通知将事件的消费者和事件的产生者解耦,
拦截器将技术关注点从业务逻辑中解耦,并且
装饰器允许开发者划分业务关注点。
最重要的是,Web Beans以一种类型安全的方式提供所有的特性。Web Beans从来不使用基于字符串的标识符来决定交互的对象如何关联在一起。至于XML, 虽然它仍旧是一个选项,但也可以几乎不使用。取而代之,Web Bean使用Java对象模型的类型信息和一种新的绑定注释模式将Web Beans和它们的依赖以及拦截器,装饰器和事件消费者关联在一起。
Web Beans服务是相当普遍的,可以应用在下列Java EE环境中的组件类型中:
所有的JavaBeans,
所有的EJB, 和
所有的Servlet。
Web Beans甚至提供了必要的整合点,以便未来的Java EE规范或者其他非标准的框架中的不同组件能够和Web Beans轻松整合,使用Web Beans服务以及和任何其他类型的Web Bean交互。
Web Beans受到了包括Seam, Guice和Spring在内的很多现有的Java框架的影响。然而,Web Beans具有自己鲜明的特性:在类型安全方面优于Seam,比Spring更加具备状态和使用更少的XML, 比Guice更加具备Web和企业应用的能力。
最重要的是,Web Beans是一个JCP标准,能够干净地整合到Java EE中。Web Beans也可以整合到任何使用轻量的内嵌EJB的Java SE环境中。