`
wateriness
  • 浏览: 17465 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SEAM框架之我见--Bijection

阅读更多

一、概念:
对广大java开发人员来说,依赖注入或控制返转已经是一个耳熟能祥的概念了。因为seam强调有状态模型,相对于依赖注入来说,它为开发人员带来了一个新的概念:bijection—双向注入。它有如下含义:
1.上下文相关的—双向注入可用来装配位于不同上下文中的有状态对象。例一个位于request或conversation上下文中发对象可以引用一个位于session上下文中的对象,反之亦然,一个位于session上下文中的对象可引用一个位于当前request或conversation上下文中的对象。
2.双向的—对象被调用时,它引用的属性可从上下文变量中注入,也可将其属性作为变量输出到上下文中去。上下文变量可在对象被调用时作为对象属性被维护、修改。
3.动态的—因为上下文变量有可能改变,并且部件是有状态的,所以双向注入每次在对象被调用时都会发生。
从本质上说,通过指定部件实例变量的值是注入、或输出或两者兼而有之,双向注入映射上下文变量到一个部件实例变量
二、用法:
实现方式:按照seam所倡导的,双向注入用@annotation--标注的方式实现。既然是双向,当然要有两个标注--@In、@Out:下面介绍其用法:
@In标注
@In标注指定一个上下文变量的值被注入到一个实例对象的属性,有二种实现方式—在变量前加上@In标注或在set方法前加上@In标注,例:
@Name(“loginAction”)
@stateless
Public class loginAction implement login{
@In User user;   //变量前加上@In
 …
}

@Name(“loginAction”)
@stateless
Public class loginAction implement login{
User user;
@In      //set方法前加上@In
Public void setUser(User user){
 This.user=user;
}
 …
}
 一般情况下,seam根据部件属性或实例变量名在所有上下文中搜索,如果知道变量名,也可以显示指定变量名,如@In(“currentUser”).
如果变量不存在于上下文,而又想部件在实例化的时候即创建属性实例,可以通过指定@In(create=true)实现。
如果部件属性值是可选的,即创建部件时属性不一定必须,则可以通过指定@In(required=false)实现。
对注入而言,甚至可以注入上下文中变量的属性,例如:
@Name(“loginAction”)
@stateless
Public class loginAction implement login{
@In(“#{user.username}”)  String username;
 …
}

@Out
@Out标注指定部件属性的值输出到上下文,同样有二种文法—通过实例变量或通过get方法。举例如下:
@Name(“loginAction”)
@stateless
Public class loginAction implement login{
@Out User user;   //变量前加上@Out
 …
}

@Name(“loginAction”)
@stateless
Public class loginAction implement login{
User user;
@Out      //get方法前加上@Out
Public void getUser(){
 Return user;
}
 …
}

一个上下文变量既可以注入部件属性,也可由部件属性输出,例如:
@Name(“loginAction”)
@stateless
Public class loginAction implement login{
@in @Out User user;  
 …
}

@Name(“loginAction”)
@stateless
Public class loginAction implement login{
User user;
@In      //set方法前加上@In
Public void setUser(User user){
 This.user=user;
}

@Out      //get方法前加上@Out
Public void getUser(){
 Return user;
}
 …
}

 

分享到:
评论
4 楼 pf_miles 2008-04-03  
引用

xwzhang 前天
@Out标注指定部件属性的值输出到上下文:是输出到哪个上下文呢?

是这个@out标记所在的类的@Scope标记所指定的那个上下文,也就是和“当前@out所在这个对象”相同的上下文。
3 楼 pf_miles 2008-04-03  
引用

yangzhihuan 2007-04-18
对于这一句:一般情况下,seam根据部件属性或实例变量名在所有上下文中搜索,如果知道变量名,也可以显示指定变量名,如@In(“currentUser”).
我有个疑惑:如果不同的上下文有相同名字的变量呢?优先级是否按照搜索的上下文的顺序来决定呢?这个没有说明.

搜索顺序为:event,page,conversation,session,bussinessProcess,application.
2 楼 xwzhang 2008-04-01  
@Out标注指定部件属性的值输出到上下文:是输出到哪个上下文呢?
1 楼 yangzhihuan 2007-04-18  
对于这一句:一般情况下,seam根据部件属性或实例变量名在所有上下文中搜索,如果知道变量名,也可以显示指定变量名,如@In(“currentUser”).
我有个疑惑:如果不同的上下文有相同名字的变量呢?优先级是否按照搜索的上下文的顺序来决定呢?这个没有说明.

相关推荐

    JBoss_Enterprise_Application_Platform-5.0.1-Seam_Reference_Guide-en-US.pdf

    JBoss_Enterprise_Application_Platform-5.0.1-Seam_Reference_Guide-en-US.pdf

    Seam-Carving-Matlab-master.rar_boardkkc_seam_seam carving_seamca

    这个名为"Seam-Carving-Matlab-master.rar_boardkkc_seam_seam carving_seamca"的压缩包文件包含了Matlab实现的Seam Carving算法,非常适合学习和理解这一技术。 Seam Carving的基本思想是找到图像中的一条或几条...

    Seam框架文档简述

    ### Seam框架核心知识点详解 #### 一、Seam框架简介 Seam,全称为JBoss Seam,是一款基于Java EE 5的技术栈构建的应用框架。它通过整合JSF(JavaServer Faces)与EJB 3.0(Enterprise JavaBeans 3.0)组件,并充分...

    Seam in Action - MEAP - 2008

    8. **Seam 管理的事务和持久化 (Seam-Managed Transactions and Persistence)** - **事务管理**:Seam 自动处理事务的开始、提交或回滚,简化了事务管理的复杂性。 - **持久化支持**:Seam 提供了一系列工具和...

    Seam Carving for Content-Aware Image Resizing(基于内容缩放图片的方法)

    2007年Shai Avidan 和Ariel Shamir论文《Seam Carving for Content-Aware Image Resizing》所提出方法的Matlab代码实现和作者的论文。 效果非常炫,而且代码不长

    seam框架相关知识总结

    Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...

    seam in action

    ### Seam 框架知识点详解 #### 一、Seam框架概述 - **定义与特点**:Seam是一个建立在Java EE平台上的快速应用开发框架,它极大地简化了企业级应用的开发流程。通过整合一系列Java EE技术如JSF、EJB 3.0等,Seam...

    seam-gen命令解析文档

    #### 一、Seam框架简介及seam-gen命令的作用 Seam框架是一款基于Java EE标准的轻量级企业级应用框架,它极大地简化了Java EE应用的开发流程,使得开发者能够更加高效地构建复杂的业务逻辑。Seam框架支持多种Java EE...

    基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》全书

    #### 一、Seam框架简介 Seam框架是JBoss组织推出的一个开源项目,旨在简化企业级应用开发,通过提供一套完整的、易于使用的组件和服务来实现这一目标。它基于Java EE标准,特别是JSF(JavaServer Faces)和EJB 3.0...

    Jboss seam3 实战

    - Seam3拆分了Seam2的功能,提供了一系列模块化的组件,如seam-solder、seam-config-xml、seam-servlet等。 3. JBoss Seam3环境要求: - 支持JbossAS6和JbossAS7.x应用服务器。 - 需要JDK1.5及以上版本支持。 -...

    Seam_Java框架.doc

    Seam是一个针对Java开发的全栈式框架,旨在简化开发过程,提高开发效率。它适应了快速开发和简化架构的需求,与传统的Java框架相比,Seam具有更简洁的层次结构和强大的组件机制。 首先,Seam的核心设计理念在于减少...

    seam 框架整合hibernate+jsf

    Seam框架是一个全面的Java EE应用开发框架,它旨在简化企业级应用的开发流程,尤其在整合用户界面、业务逻辑和服务层方面。本资源重点讨论了Seam如何与Hibernate ORM框架以及JavaServer Faces (JSF) 用户界面技术...

    Gumroad - ZBrush 35 SeamStitch Brushes.zip

    Gumroad - ZBrush 35 SeamStitch Brushes 35个缝合的接缝画笔和高度/阿尔法贴图,1024x1024或2048x2048在Tiff,PSD和ZBrush画笔格式。 35 brushes and Height/alpha maps, all 1024x1024 or 2048x2048 in Tiff, PSD...

    Seam 2.1 安全模块框架

    Seam 2.1 安全模块框架是一个强大的工具,为使用 Seam 开发的应用程序提供了全面的安全管理和认证机制。框架的核心特性包括: 1. **安全验证**:Seam 提供了一个可扩展的安全验证层,基于 Java Authentication and ...

    seam-978-1-8471-9592-0:Seam 2.x 网页开发

    seam-978-1-8471-9592-0 Seam 2.x 网页开发

    Seam-gen生成基础项目骨架

    Seam-gen 是一款用于快速生成基于 Seam 框架的基础项目结构的工具,它通过简单的命令行交互式过程,帮助开发者构建项目的雏形,并且能够根据数据库信息自动生成管理数据库的 CRUD(Create, Read, Update, Delete)...

    seam_reference.pdf

    - **使用seam-gen快速上手**:Seam提供了一个名为seam-gen的工具,可以帮助开发者快速设置项目结构并生成基本的应用代码。 - **设置新项目**:介绍了如何使用seam-gen创建一个新的项目。 - **创建动作**:展示了...

    seam-javapolis2007

    ### Seam-Javapolis2007 知识点解析 #### 标题解析 - **标题**:“seam-javapolis2007” - **解释**:此标题表明了内容是关于 Seam 框架在 2007 年 Javapolis 大会上的演示或演讲材料。Javapolis 是一个重要的 Java...

Global site tag (gtag.js) - Google Analytics