一、概念:
对广大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;
}
…
}
分享到:
相关推荐
JBoss_Enterprise_Application_Platform-5.0.1-Seam_Reference_Guide-en-US.pdf
这个名为"Seam-Carving-Matlab-master.rar_boardkkc_seam_seam carving_seamca"的压缩包文件包含了Matlab实现的Seam Carving算法,非常适合学习和理解这一技术。 Seam Carving的基本思想是找到图像中的一条或几条...
### Seam框架核心知识点详解 #### 一、Seam框架简介 Seam,全称为JBoss Seam,是一款基于Java EE 5的技术栈构建的应用框架。它通过整合JSF(JavaServer Faces)与EJB 3.0(Enterprise JavaBeans 3.0)组件,并充分...
8. **Seam 管理的事务和持久化 (Seam-Managed Transactions and Persistence)** - **事务管理**:Seam 自动处理事务的开始、提交或回滚,简化了事务管理的复杂性。 - **持久化支持**:Seam 提供了一系列工具和...
2007年Shai Avidan 和Ariel Shamir论文《Seam Carving for Content-Aware Image Resizing》所提出方法的Matlab代码实现和作者的论文。 效果非常炫,而且代码不长
Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...
### Seam 框架知识点详解 #### 一、Seam框架概述 - **定义与特点**:Seam是一个建立在Java EE平台上的快速应用开发框架,它极大地简化了企业级应用的开发流程。通过整合一系列Java EE技术如JSF、EJB 3.0等,Seam...
#### 一、Seam框架简介及seam-gen命令的作用 Seam框架是一款基于Java EE标准的轻量级企业级应用框架,它极大地简化了Java EE应用的开发流程,使得开发者能够更加高效地构建复杂的业务逻辑。Seam框架支持多种Java EE...
#### 一、Seam框架简介 Seam框架是JBoss组织推出的一个开源项目,旨在简化企业级应用开发,通过提供一套完整的、易于使用的组件和服务来实现这一目标。它基于Java EE标准,特别是JSF(JavaServer Faces)和EJB 3.0...
- Seam3拆分了Seam2的功能,提供了一系列模块化的组件,如seam-solder、seam-config-xml、seam-servlet等。 3. JBoss Seam3环境要求: - 支持JbossAS6和JbossAS7.x应用服务器。 - 需要JDK1.5及以上版本支持。 -...
Seam是一个针对Java开发的全栈式框架,旨在简化开发过程,提高开发效率。它适应了快速开发和简化架构的需求,与传统的Java框架相比,Seam具有更简洁的层次结构和强大的组件机制。 首先,Seam的核心设计理念在于减少...
Seam框架是一个全面的Java EE应用开发框架,它旨在简化企业级应用的开发流程,尤其在整合用户界面、业务逻辑和服务层方面。本资源重点讨论了Seam如何与Hibernate ORM框架以及JavaServer Faces (JSF) 用户界面技术...
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 开发的应用程序提供了全面的安全管理和认证机制。框架的核心特性包括: 1. **安全验证**:Seam 提供了一个可扩展的安全验证层,基于 Java Authentication and ...
seam-978-1-8471-9592-0 Seam 2.x 网页开发
Seam-gen 是一款用于快速生成基于 Seam 框架的基础项目结构的工具,它通过简单的命令行交互式过程,帮助开发者构建项目的雏形,并且能够根据数据库信息自动生成管理数据库的 CRUD(Create, Read, Update, Delete)...
- **使用seam-gen快速上手**:Seam提供了一个名为seam-gen的工具,可以帮助开发者快速设置项目结构并生成基本的应用代码。 - **设置新项目**:介绍了如何使用seam-gen创建一个新的项目。 - **创建动作**:展示了...
### Seam-Javapolis2007 知识点解析 #### 标题解析 - **标题**:“seam-javapolis2007” - **解释**:此标题表明了内容是关于 Seam 框架在 2007 年 Javapolis 大会上的演示或演讲材料。Javapolis 是一个重要的 Java...