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;
}
 …
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值