博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CDI(Weld)高级<5> Stereotypes(CDI注解模板)
阅读量:6037 次
发布时间:2019-06-20

本文共 2777 字,大约阅读时间需要 9 分钟。

hot3.png

1.综述

很多系统中,架构模式都会产生可重用的bean角色.stereotype允许框架的开发人员为这些bean声明通用的metadata.
stereotype可以把下面这些内容组合到一起:
  • 默认的范围
  • 一组拦截器
stereotype还可以指出:
  • 所有被stereotype标记的bean都有默认的bean EL name
  • 所有被stereotype标记的bean都是alternatives
bean可以声明多个stereotype.stereotype可以用于bean类或producer方法,field.
stereotype是一个包含@Stereotype的注解,这个注解中组合了其他的annotations。
比如下面这个stereotype用于标记JSF框架中使用ViewScoped的backingBean:
import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.ElementType.TYPE;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import javax.enterprise.inject.Stereotype;import javax.inject.Named;import org.omnifaces.cdi.ViewScoped;@Named@ViewScoped@Documented@Stereotype@Target({ TYPE, METHOD, FIELD })@Retention(RUNTIME)public @interface ViewModel {}
注:org.omnifaces.cdi.ViewScoped 是一个兼容CDI的viewscoped.作用和JSF的View范围一样.
把他放到bean上,
@ViewModelpublic class LoginBean { ... }

2.Default scope for a stereotype

stereotype可以设定beans的默认scope,比如:
@RequestScoped@Stereotype@Retention(RUNTIME)@Target(TYPE)public @interface Action {}
但是Bean也可以自己重写这个默认值:
@Dependent @Actionpublic class DependentScopedLoginAction { ... }

3.Interceptor bindings for stereotypes

stereotype可以将一组interceptor组合到一起,使用该stereotype标记的beans都会受到这组interceptor的拦截.
@RequestScoped@Transactional(requiresNew=true)@Secure@Stereotype@Retention(RUNTIME)@Target(TYPE)public @interface Action {}

这样你的业务代码里就看不到transaction和security等技术相关的内容了 

4.用stereotype指定默认name

@RequestScoped@Transactional(requiresNew=true)@Secure@Named@Stereotype@Retention(RUNTIME)@Target(TYPE)public @interface Action {}
如上所示,stereotype可以使用@Named,这样所有的使用此注解的Bean都会有默认的EL NAME.

现在LoginAction bean 的默认EL NAME就是 loginAction.

5.stereotype和@Alternative

stereotype 也可以使用@Alternative 替换符.
@Alternative@Stereotype@Retention(RUNTIME)@Target(TYPE)public @interface Mock {}

在对应Bean上使用

@Mockpublic class MockLoginAction extends LoginAction { ... }

bean.mxl配置,此处仅需如下写入,org.mycompany.testing.Mock就是stereotype注解.这样所有使用@Mock的Bean会被启用.

org.mycompany.testing.Mock

6.Stereotype stacking

@Auditable和@Action两个Stereotype注解是可以再弄一个Stereotype的.这个我们叫他stereotype stacking.下面是个例子:
@Auditable@Action@Stereotype@Target(TYPE)@Retention(RUNTIME)public @interface AuditableAction {}

7.Built-in stereotypes

CDI defines one standard stereotype, @Model, which is expected to be used frequently in web applications:
@Named @RequestScoped @Stereotype @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface Model {}
Instead of using JSF managed beans, just annotate a bean @Model, and use it directly in your JSF view!

转载于:https://my.oschina.net/zhaoqian/blog/266106

你可能感兴趣的文章
C#winform省市县联动,以及有的县是空值时显示异常的处理
查看>>
android intent 传递list或者对象
查看>>
修改activeMQ端口号
查看>>
django 简单的邮件系统
查看>>
深度学习-Caffe编译测试的小总结
查看>>
解决MYSQL错误:ERROR 1040 (08004): Too many connections
查看>>
【树莓派】树莓派网络配置:静态IP、无线网络、服务等
查看>>
JavaScript——双向链表实现
查看>>
git服务器新增仓库
查看>>
Appium+python自动化7-输入中文
查看>>
抽象类和借口的区别
查看>>
WebConfig配置文件详解
查看>>
nginx的location root 指令
查看>>
zDiaLog弹出层
查看>>
linux不常用但很有用的命令(持续完善)
查看>>
NFine常见错误
查看>>
zabbix报警媒介------>微信报警
查看>>
使用视图的好处
查看>>
面向开发运维的10款开源工具
查看>>
MVC ---- 增删改成 EF6
查看>>