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

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”).
我有个疑惑:如果不同的上下文有相同名字的变量呢?优先级是否按照搜索的上下文的顺序来决定呢?这个没有说明.

相关推荐

    Seam框架文档简述

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

    core seam technique

    Seam 框架的核心在于其独特的上下文注入机制(bijection),该机制不仅极大地简化了依赖管理和组件交互,而且提高了应用的整体性能和可维护性。通过深入理解上述关键知识点,开发者能够更高效地构建出健壮、灵活且...

    JBoss Seam入门介绍

    描述:本文将详细介绍JBoss Seam框架的核心概念、关键特性以及如何构建基于Seam的应用程序。Seam作为一个企业级Java Web应用框架,它将Java EE和JSF无缝集成,旨在填补Java EE 5.0中缺失的框架角色,并为JSR299: Web...

    Seam入门

    Seam框架的核心优势之一在于它能够无缝地将JSF与EJB3.0进行整合。这意味着开发者可以在保持原有JSF视图层不变的情况下,轻松地利用EJB3.0的强大功能,如事务管理和持久性服务等。这种整合方式极大地提高了开发效率,...

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

    Seam框架是一款革命性的Web应用开发框架,它将标准的Java EE技术与一系列非标准的技术融合在一个一致且统一的编程模型之中。这一框架对WebBeans规范(JSR-299)的发展起到了推动作用,并持续不断地在创新方面做出...

Global site tag (gtag.js) - Google Analytics