EJB3.0学习笔记之三 Interceptor
来源:互联网 发布:天刀怎么下载捏脸数据 编辑:程序博客网 时间:2024/06/02 16:54
截获器可以监听程序的一个或所有方法.截获器对方法调用流提供了细粒度控制.可以在无状态会话 bean,有状态会话 bean 和消息驱动 bean 上使用它们.截获器可以是同一 bean 类中的方法或是一个外部类.
下面介绍如何在Session Bean类中使用外部截获器类.
@Interceptors 注释指定一个或多个在外部类中定义的截获器.上面截获器HelloInterceptor对HelloChinaBean中
的所有方法进行监听.
@AroundInvoke 注释指定了要用作截获器的方法.用@AroundInvoke注释指定的方法必须遵守以下格式:
public Object XXX(InvocationContext ctx) throws Exception
XXX代表方法名可以任意.
下面是HelloChinaBean的本地及远程业务接口
除了可以在外部定义截获器之外,还可以将Session Bean中的一个或多个方法定义为截获器.
上面只需一个@AroundInvoke 注释就指定了要用作截获器的方法.
下面介绍如何在Session Bean类中使用外部截获器类.
- package com.foshanshop.ejb3.impl;
- import com.foshanshop.ejb3.HelloChina;
- import com.foshanshop.ejb3.HelloChinaRemote;
- import javax.ejb.Local;
- import javax.ejb.Remote;
- import javax.ejb.Stateless;
- import javax.interceptor.Interceptors;
- @Stateless
- @Remote ({HelloChinaRemote.class})
- @Local(HelloChina.class)
- @Interceptors({HelloInterceptor.class})
- public class HelloChinaBean implements HelloChina,HelloChinaRemote {
- public String SayHello(String name) {
- return name +"说:你好!中国.";
- }
- public String Myname() {
- return "我是佛山人";
- }
- }
@Interceptors 注释指定一个或多个在外部类中定义的截获器.上面截获器HelloInterceptor对HelloChinaBean中
的所有方法进行监听.
- package com.foshanshop.ejb3.impl;
- import javax.interceptor.AroundInvoke;
- import javax.interceptor.InvocationContext;
- public class HelloInterceptor {
- @AroundInvoke
- public Object log(InvocationContext ctx) throws Exception {
- System.out.println("*** HelloInterceptor intercepting");
- long start = System.currentTimeMillis();
- try{
- if (ctx.getMethod().getName().equals("SayHello")){
- System.out.println("*** SayHello 已经被调用! *** " );
- }
- if (ctx.getMethod().getName().equals("Myname")){
- System.out.println("*** Myname 已经被调用! *** " );
- }
- return ctx.proceed();
- }catch (Exception e) {
- throw e;
- }finally {
- long time = System.currentTimeMillis() - start;
- System.out.println("用时:"+ time + "ms");
- }
- }
- }
@AroundInvoke 注释指定了要用作截获器的方法.用@AroundInvoke注释指定的方法必须遵守以下格式:
public Object XXX(InvocationContext ctx) throws Exception
XXX代表方法名可以任意.
下面是HelloChinaBean的本地及远程业务接口
- package com.foshanshop.ejb3;
- public interface HelloChinaRemote {
- public String SayHello(String name);
- public String Myname();
- }
HelloChina.java
- package com.foshanshop.ejb3;
- public interface HelloChina extends HelloChinaRemote{
- }
除了可以在外部定义截获器之外,还可以将Session Bean中的一个或多个方法定义为截获器.
- package com.foshanshop.ejb3.impl;
- import com.foshanshop.ejb3.HelloChina;
- import com.foshanshop.ejb3.HelloChinaRemote;
- import javax.ejb.Local;
- import javax.ejb.Remote;
- import javax.ejb.Stateless;
- import javax.interceptor.AroundInvoke;
- import javax.interceptor.InvocationContext;
- @Stateless
- @Remote ({HelloChinaRemote.class})
- @Local(HelloChina.class)
- public class HelloChinaBean implements HelloChina,HelloChinaRemote {
- public String SayHello(String name) {
- return name +"说:你好!中国.";
- }
- public String Myname() {
- return "我是佛山人";
- }
- @AroundInvoke
- public Object log(InvocationContext ctx) throws Exception {
- try{
- if (ctx.getMethod().getName().equals("SayHello")){
- System.out.println("*** HelloChinaBean.SayHello() 已经被调用! *** " );
- }
- if (ctx.getMethod().getName().equals("Myname")){
- System.out.println("*** HelloChinaBean.Myname() 已经被调用! *** " );
- }
- return ctx.proceed();
- }catch (Exception e) {
- throw e;
- }
- }
- }
上面只需一个@AroundInvoke 注释就指定了要用作截获器的方法.
- EJB3.0学习笔记之三 Interceptor
- EJB3 学习笔记三
- Jboss Ejb3.0 Interceptor
- EJB3.0学习笔记之EntityBean
- ejb3.0学习笔记
- EJB3.0学习笔记
- ejb3.0学习之三:会话Bean的生命周期
- EJB3学习笔记之 EJB3中的注释(一)
- EJB3.0学习笔记之一
- EJB3.0学习笔记之二 Session Bean的生命周期
- EJB3.0学习笔记之四 依赖注入(dependency injection)
- struts2学习笔记之拦截器(Interceptor)
- struts2学习笔记之拦截器(Interceptor)
- EJB3.0 draft学习笔记(1)
- EJB3.0 draft学习笔记(1)
- EJB3.0 draft学习笔记(1)
- EJB3.0技术体系---学习笔记
- EJB3.0学习笔记1—入门
- static.c
- 大千世界里的封装
- 关于进程的枚举与关闭
- 海南行观感(一)
- static.cpp
- EJB3.0学习笔记之三 Interceptor
- stat_fun.cpp
- 自定义Http处理及应用之HttpHandler篇
- 第一次来这里,写点什么呢?
- 终结"AV终结者"
- PGP实现电子邮件安全(实验报告)
- DDD的最佳实践-ejb3
- 打方块游戏
- 不小心扭伤了脚