[weld] 组合拳Stereotypes

wuhaixing 2010-05-18
CDI规范中定义了stereotype:
很多系统中,架构模式的重用都会产生可重用的bean角色。stereotype允许框架的开发人员集中为这些有共性的bean声明通用的metadata。
stereotype可以把下面这些内容组合到一起:
  • 默认的scope
  • 一组interceptor

stereotype还可以指出:
  • 所有被stereotype标记的bean都由默认的bean EL name
  • 所有被stereotype标记的bean都是alternatives

bean可以声明多个stereotype。Stereotype标记可以用于bean类或producer方法、field。
stereotype是一个标记为@Stereotype的注解,这个注解中组合了其他的annotations。比如下面这个stereotype用于标记某个MVC框架中的action类:
@Stereotype
@Retention(RUNTIME)
@Target(TYPE)
...
public @interface Action {}

把他放到bean上:
@Action 
public class LoginAction { ... }

当然,上面这个stereotype应该加上些annotations,否则她没多大用处。
wuhaixing 2010-05-18
stereotype的默认scope
stereotype可以设定beans的默认scope,比如:
@RequestScoped
@Stereotype
@Retention(RUNTIME)
@Target(TYPE)
public @interface Action {}

如果不爽,action可以自己override这个默认值:
@Dependent @Action 
public class DependentScopedLoginAction { ... }

一般overriding这样一个默认值没多大用,但你得了解stereotype还能组合很多东西呢
wuhaixing 2010-05-18
stereotype的interceptor
stereotype可以将一组interceptor组合到一起,标记有该stereotype的beans都会受到这组interceptor的“保护”。
@RequestScoped
@Transactional(requiresNew=true)
@Secure
@Stereotype
@Retention(RUNTIME)
@Target(TYPE)
public @interface Action {}

这样你的业务代码里就更见不到transaction和security等技术相关的内容了!
wuhaixing 2010-05-18
用stereotype指定默认name
wuhaixing 2010-05-18
Alternative stereotypes
wuhaixing 2010-05-18
stereotype堆
wuhaixing 2010-05-18
自带的stereotype
langwangff 2010-05-20
:cry:
langwangff 2010-05-20
langwangff 2010-05-20
  
Global site tag (gtag.js) - Google Analytics