`
uule
  • 浏览: 6342060 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

EJB拦截器Interceptor

    博客分类:
  • EJB
 
阅读更多

拦截器可以监听程序的一个或所有方法.拦截器对方法调用流提供了细粒度控制.可以在无状态会话 bean,有状态会话 bean 和消息驱动 bean 上使用它们.

拦截器可以是同一 bean 类中的方法或是一个外部类.
下面介绍如何在Session Bean类中使用外部拦截器类.

 

HelloChinaBean.java
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中的所有方法进行监听.
HelloInterceptor.java
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的本地及远程业务接口

HelloChinaRemote .java
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中的一个或多个方法定义为拦截器.
HelloChinaBean.java
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 注释就指定了要用作拦截器的方法.  
分享到:
评论

相关推荐

    EJB拦截器的Demo

    在EJB拦截器中,我们可以定义多个拦截器方法,这些方法会在EJB的生命周期事件(如方法调用、创建、销毁等)触发时按顺序执行。拦截器方法通过`@AroundInvoke`、`@PostConstruct`、`@PreDestroy`等注解标识,这些注解...

    8.EJB3的拦截器(外部类)

    EJB3中的拦截器可以是内部类或外部类,这里的“8.EJB3的拦截器(外部类)”可能是指定义在单独类中的拦截器。 ### 2. 定义拦截器 创建一个拦截器需要实现`javax.interceptor.Interceptor`接口,并使用`@Interceptor`...

    JavaEE 拦截器简单示例源代码

    在JavaEE应用的部署描述符(如`ejb-jar.xml`或`web.xml`)中启用并配置拦截器。或者,如果你使用的是CDI(Contexts and Dependency Injection),可以在`beans.xml`中进行配置。 5. **运行与测试** 部署应用程序...

    jboss-ejb3-interceptors.jar.zip

    这个库的核心是`org.jboss.ejb3.interceptor`包,其中定义了拦截器的相关接口和类,如`Interceptor`, `InterceptorChain`, `InterceptorInfo`等,它们共同构建了EJB3拦截器的执行模型。 拦截器在EJB3中扮演的角色...

    EJB+Annotation实现AOP的DEMO

    其次,AOP在EJB中的实现通常依赖于Java EE容器提供的拦截器(Interceptor)。拦截器可以在方法调用前后执行自定义逻辑,这与AOP的切面概念非常相似。在EJB中,我们可以通过以下步骤实现: 1. **定义拦截器**:创建...

    Java EE Performance Measuring Interceptor.zip

    在Java EE 6及更高版本中,JSR 318引入了拦截器规范,使得开发者可以创建符合统一接口的拦截器,这些拦截器可以与EJB(Enterprise JavaBeans)或者CDI(Contexts and Dependency Injection)一起工作。拦截器通过在...

    EJB3笔记代码

    本笔记代码主要涵盖了EJB3的一些核心特性,包括定时任务(timer)、会话bean(session)、实体bean(entity)、拦截器(interceptor)、领域模型(domain)、客户端(client)、事务管理(transaction)、消息传递...

    EJB3.0_Servlet.rar_ejb3.0 example

    通过`@Interceptor`和`@AroundInvoke`等注解,开发者可以自定义拦截器行为。 在示例中,我们可能会看到一个简单的Servlet,它调用了一个EJB 3.0的bean来处理请求。这个bean可能是无状态的,负责与数据库交互,实现...

    EJB3.0中文 版

    - 通过`@Interceptor`注解定义拦截器类。 - 通过`@AroundInvoke`等注解定义拦截逻辑。 - **依赖注入**: - 通过`@Inject`注解实现自动装配。 - 支持字段注入、构造函数注入等。 #### 5. 消息驱动Bean (Message-...

    Ejb3.0帮助文档包(开发手册&实例教程)

    @Interceptor注解用于定义拦截器,@AroundInvoke注解标记拦截方法。 7. **实例教程** 《ejb3.0实例教程.pdf》很可能包含了逐步指导,展示如何创建和部署EJB 3.0组件,以及如何与其他Java EE组件(如Web服务、...

    ejb2.0.rar_EJB2.0特性_ejb2.0

    6. **Interceptors**:EJB2.0引入了拦截器(Interceptor),这是一个预定义的回调机制,允许在方法调用前后插入自定义代码,用于执行如日志记录、事务控制等通用任务,提高了代码复用性和模块化。 7. **J2EE ...

    struts2+spring+ejb3源代码(完整版)

    通过Interceptor拦截器,Struts2可以实现AOP(面向切面编程),如日志、权限验证等功能。 **Spring** 是一个全面的后端应用程序框架,提供依赖注入(DI)和面向切面编程(AOP)。DI使得对象之间的关系可以在运行时...

    EJB3规范 简体中文

    - `@Interceptor` 注释符用于指定拦截器。 - `@PostConstruct` 和 `@PreDestroy` 注释符用于标记 Bean 的初始化和销毁方法。 ##### 3.7 Timeout - `@Timeout` 注释符用于处理有状态会话 Bean 的超时事件。 ##### ...

    EJB依赖注入的原理

    除了依赖注入,EJB3.0还引入了截获器(Interceptor)的概念。截获器允许开发者定义在bean的业务方法或生命周期事件前后的拦截逻辑,提供了AOP(面向切面编程)的能力。截获器方法可以通过注解(如@AroundInvoke、@...

    struts2+EJB3.0开发实例项目

    2. **Interceptor**:拦截器允许在执行 Action 之前和之后插入自定义逻辑,例如日志记录、权限验证等。 3. **Value Stack**:用于传递数据,简化视图层的数据绑定。 4. **Result**:定义了 Action 执行后如何呈现...

    EJB学习笔记、运行机制

    在EJB运行过程中, Stub和拦截器(Request Interceptor)扮演着重要角色。Stub作为远程对象的本地代理,隐藏了网络调用细节,而拦截器则负责调用中间件服务并将业务请求委托给EJB。开发时,需要编写业务接口(Remote...

    ejb3.0中文版--

    @Interceptor和@AroundInvoke注解分别用于定义拦截器和拦截方法。 8. **异步方法(Asynchronous Methods)**:通过@Asynchronous注解,开发者可以声明方法以异步方式执行,提高应用的并发性能。 9. **Web服务支持*...

    EJB3.0中文文档

    **2.10 拦截器(INTERCEPTOR)** 用于在方法调用前后执行特定代码,例如日志记录或性能监控。 **2.11 依赖注入(DEPENDENCY INJECTION)** 依赖注入是一种设计模式,用于自动管理组件间的依赖关系,提高代码的可测试...

Global site tag (gtag.js) - Google Analytics