EJB整理4-拦截器
来源:互联网 发布:java如何设置全局变量 编辑:程序博客网 时间:2024/06/17 19:05
1 拦截器
拦截器可以拦截 Session bean 和 message-driven bean 的方法调用或生命周期事件。拦截器用于封装应用的公用行为,使这些行为与业务逻辑分离,一旦这些公用行为发生改变,而不必修改很多业务类。拦截器可以是同一bean类中的方法或是一个外部类。
下面介绍如何在 Session Bean 类中使用外部拦截器类。
HelloChinaBean.java
@Interceptors 注释指定一个或多个在外部类中定义的拦截器,多个拦截器类之间用逗号分隔,如:@Interceptors({A.class,A.class,B.class}),如果只有一个拦截器可以省略大括号。上面拦截器 HelloInterceptor对HelloChinaBean的所有方法进行拦截。如果你只需对某一方法进行拦截,你可以在方法上面定义拦截器,如:
拦截器 HelloInterceptor.java
@AroundInvoke 注释指定了要用作拦截器的方法,拦截器方法与被拦截的业务方法执行在同一个java 调用堆栈、同一个事务和安全上下文中。用@AroundInvoke 注释指定的方法必须遵守以下格式:
public Object XXX(javax.interceptor.InvocationContext ctx) throwsException
XXX 代表方法名可以任意。javax.interceptor.InvocationContext封装了客户端所调用业务方法的一些信息。下面是InvocationContext 的定义:
getTarget( ) 指向被调用的 bean 实例
getMethod( ) 指向被拦截的业务方法
getParameters( ) 获取被拦截业务方法的参数
setParameters() 设置被拦截业务方法的参数
getContextData( ) 方法返回一个 Map 对象,它在整个方法调用期间都可以被访问到。位于同一方法调用内的不同截器之间可以利用它来传递上下文相关的数据。
在 HelloInterceptor 代码中,我们调用了 ctx.proceed()方法。如果还有其它拦截器未执行,ctx.proceed()方法内部会调用后面拦截器的@AroundInvoke 方法,直到后面的拦截器全部执行结束,EJB 容器才会执行被拦截的业务方法。ctx.proceed()方法必须在拦截器代码中被调用,否则被拦截的业务方法就根本不会被执行。另外如果我们想在被拦截的业务方法执行结束后再执行一些自定义代码,我们可以在 ctx.proceed()执行后方法返回前加入自己的代码,如:
- EJB整理4-拦截器
- EJB拦截器
- EJB拦截器(Interceptor)
- EJB---->拦截器(Interceptor)
- EJB拦截器(Interceptor)
- EJB之拦截器
- EJB中的拦截器
- EJB拦截器
- EJB拦截器Interceptor
- EJB 3.x 拦截器
- EJB中的AOP:拦截器
- EJB学习笔记六(EJB中的拦截器)
- 【EJB】Developing EJB Applications -- Chapter7(容器和客户端拦截器)
- 会话EJB系列(五)拦截器
- 会话EJB系列(五)拦截器
- EJB中的拦截器--注解方式
- EJB学习笔记_9_拦截器
- struts2 拦截器整理
- DataTable添加数据
- EJB整理3-消息驱动Bean(MDB)
- Windows系统编程之进程间通信
- CSDN 一路有你陪伴
- struts2----摘要2
- EJB整理4-拦截器
- java线程同步之死锁问题
- 要特别注意写代码之前的设计
- 使用synergy!
- 大端法、小端法、网络字节序
- 怎样解决数据库 Navicat 8for MySQL中不能连接到本地数据库的问题啊??请大虾们帮忙
- uva 727 运算符 中缀到后缀的转换
- jdbc操作测试类
- 华为的一道C语言面试题