`
lbfhappy
  • 浏览: 82713 次
社区版块
存档分类
最新评论

EJB中实现的AOP

阅读更多

现在AOP是越来越流行了,面向切面的编程,呵呵,似乎比面向对象的编程还要牛一些,在EJB中,就可以利用拦截机制来实现AOP

代码如下:

会话BEAN的 代码
  1. /*  
  2.  * TestInterceptorBean.java  
  3.  *  
  4.  * Created on 2006年12月14日, 上午10:38  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package com.hadeslee.session;   
  11.   
  12. import javax.ejb.Stateless;   
  13. import javax.interceptor.AroundInvoke;   
  14. import javax.interceptor.Interceptors;   
  15. import javax.interceptor.InvocationContext;   
  16.   
  17. /**  
  18.  *  
  19.  * @author lbf  
  20.  */  
  21. @Stateless  
  22.   
  23. public class TestInterceptorBean implements com.hadeslee.session.TestInterceptorRemote {   
  24.        
  25.     /** Creates a new instance of TestInterceptorBean */  
  26.     public TestInterceptorBean() {   
  27.     }   
  28.        
  29.     public void printSth() {   
  30.         System.out.println("原始的输出");   
  31.     }   
  32.     @Interceptors({MyInter.class})   
  33.     public String sayHello(String string) {   
  34.         return "sayHelloTo: "+string;   
  35.     }   
  36.     @Interceptors({MyInter.class})   
  37.     public String who() {   
  38.         System.out.println("原始方法调用了");   
  39.         return "原始的WHO";   
  40.     }   
  41. }   
拦截机的 代码
  1. /*  
  2.  * MyInter.java  
  3.  *  
  4.  * Created on 2006年12月14日, 上午11:06  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package com.hadeslee.session;   
  11.   
  12. import javax.interceptor.AroundInvoke;   
  13. import javax.interceptor.InvocationContext;   
  14.   
  15. /**  
  16.  *  
  17.  * @author lbf  
  18.  */  
  19. public class MyInter {   
  20.        
  21.     /** Creates a new instance of MyInter */  
  22.     public MyInter() {   
  23.     }   
  24.     @AroundInvoke  
  25.     public Object intercepter(InvocationContext ic)throws Exception{   
  26.         System.out.println("调用方的名字:"+ic.getBean());   
  27.         System.out.println("调用方的方法:"+ic.getMethod().getName());   
  28.         if(ic.getMethod().getName().equals("who"))   
  29.             ic.proceed();   
  30.         return "就是这个味";   
  31.     }   
  32. }   

在这里我们只需要在需要以后更换的方法加上一个注释@javax.interceptor.Interceptors就可以了,你可以指定一个拦截机,也可以指定多个拦截机,这个注释可以修饰类也可以修饰方法,如果放在类前面就表示此类中的所有公共方法都在调用的范围之内,如果是放在方法前面 ,则表示只作用此方法而不作用于其它方法,然后你可以写一个类来实现拦截,当然你也可以在同一个类里面实现拦截,实现拦截的类没什么特殊的地方,只要你拦截的方法遵守如下签名即可

@AroundInvoke
public Object XXX(InvocationContext ic)throws Exception{}

其中的XXX可以换成任何字符,,InvocationContext在运行的时候,由系统自动传入,

我觉得一般于拦截的地方都是以后可能会变的方法或者可能会增加功能的方法,所以应该拦截的类还是另写一个会比较好.并且使用中还发现,你可以先在方法或者类中添加@Interceptors注释,但是你指定的类没有实现@AroundInvoke方法,也不要紧,也不会报异常.所以可以先定义这个注释,以后需要的时候再改进@AroundInvoke方法,也挺好的.

在拦截的时候,你可以选择做完自己的事情,继续执行原来的方法,也可以选择就此结束,不让它往下执行了.并且如果方法有返回值的话,你如果返回一个不是同一个类型的对象,那编译也可以过,但是在运行时,会在调用此BEAN的地方抛出一个java.lang.ClassCastException异常.,所以有返回值的拦截一定要小心,如果方法没有返回值,那么你随便返回什么都可以,反正调用方也用不到这个值,这个值到最后应该就被丢弃了.

 

分享到:
评论

相关推荐

    EJB+Annotation实现AOP的DEMO

    这篇博客"使用EJB+Annotation实现AOP的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...

    struts1+EJB3整合(AOP控制权限)

    在这个"struts1+EJB3整合(AOP控制权限)"的项目中,我们看到这两个框架是如何协同工作的,以及如何通过AOP(面向切面编程)来实现权限控制,并使用JUnit进行EJB3的单元测试。 首先,让我们深入理解AOP在权限控制中...

    AOP@Work AOP 工具比较

    AspectWerkz(后来被合并到Spring项目中,成为Spring AOP的一部分)是一个轻量级的AOP框架,它专注于动态代理实现,主要应用于Java EE环境。AspectWerkz强调与现有的EJB和JMS集成,因此在企业级应用中尤为实用。其...

    在Ejb中加入拦截器

    拦截器(Interceptors)是EJB 3.0引入的一个重要特性,它们允许开发者在EJB方法调用前后插入自定义的行为,提供了一种灵活的AOP(面向切面编程)实现方式。 **1. 拦截器的概念** 拦截器是一种设计模式,它可以在...

    ejb3+spring+struts实现简单银行系统

    - 在银行系统中,Spring的IoC容器管理对象的生命周期和依赖关系,AOP用于实现日志记录、安全控制等横切关注点。 - Spring MVC作为Web层,与Struts配合,处理HTTP请求并调用业务层服务。Spring Data JPA或MyBatis...

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    在实际项目中,Java反射常用于框架的实现,如Spring框架中的AOP(面向切面编程)就是利用反射进行动态代理,实现方法拦截。EJB则常见于大型企业级应用,尤其是在银行、电信等对性能和稳定性要求极高的领域。EJB的...

    ejb spring

    2. **解耦合**:Spring的AOP支持可以用来解耦ejb中的业务逻辑和横切关注点,如日志、事务、安全性等,使得代码更加模块化。 3. **简化ejb的使用**:Spring通过其Enterprise Integration Patterns,如JmsTemplate和...

    EJB3.1深入浅出

    因此,在EJB 3.1中,Sun继续推进改革的步伐,针对EJB 2.1中的一些遗留问题进行了改进,并引入了一系列新的特性和技术。 #### 二、EJB 3.1 的主要特点 ##### 1. **No-Interface View (非接口视图)** EJB 3.1 引入...

    Spring_aop源码

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的...通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中

    spring集成ejb

    Spring 提供了一个丰富的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)框架,而EJB则是Java EE平台中的核心组件,用于处理分布式事务、安全和状态管理等企业级服务。...

    websphere,ejb教程

    这篇教程涵盖了企业级Java应用开发中的关键技术和工具,包括IBM的Websphere应用服务器、Enterprise JavaBeans(EJB)以及Mybatis和Spring的整合。下面将对这些知识点进行深入解析。 **Websphere教程** Websphere是...

    Struts2+Spring+EJB框架整合实例

    这个"Struts2+Spring+EJB框架整合实例"应该包含了上述步骤的具体实现,通过分析源代码,我们可以深入理解这三种框架如何协同工作,以及如何在实际项目中灵活运用。这种整合方式为开发人员提供了高度的灵活性和可扩展...

    jboss7.1+ejb3.1建立第一个Ejb项目

    `,并在Bean类中实现这个方法。 部署EJB到JBoss服务器,你可以右键点击项目,选择“Run As” -> “Run on Server”。EJB将被部署到服务器,准备好接受请求。 至此,你已经成功地在JBoss7.1上创建并部署了一个简单...

    EJB2和EJB3的架构异同.doc

    EJB3.0还引入了拦截器(Interceptors)的概念,类似于面向切面编程(AOP)中的拦截器。开发者可以定义拦截器方法,这些方法会在业务方法或生命周期回调之前/之后执行,提供了一种灵活的方式来处理跨切面关注点,如...

    EJB pdf 电子文档

    在微服务架构中,EJB可以作为服务之间交互的组件,通过RESTful API或JMS消息传递实现解耦。尽管微服务强调小型、独立的服务,但EJB提供的事务和安全特性在某些场景下依然有其价值。 总之,EJB是Java EE体系中不可或...

    spring+struts+ejb整合

    在"spring+struts+ejb整合"的项目中,这三个框架协同工作,以实现更高效、更模块化的应用程序开发。以下是对这个整合的具体解释: 1. **Spring**:作为核心容器,Spring负责管理应用程序的组件,包括Bean的创建、...

    10.客户端——Struts 2+Spring+EJB架构实现

    Struts 2、Spring 和 EJB 是 Java Web 开发中的三个关键框架,它们共同构建了一个强大的客户端应用程序架构。本文将深入探讨这三个框架如何协同工作,以及它们各自在企业级开发中的角色。 首先,Struts 2 是一个...

    aopalliance_java_

    5. **集成工具**:允许AOP Alliance与其他Java框架(如Spring、Hibernate、EJB等)无缝集成,实现更强大的功能。 标签 "java" 强调了这是关于Java平台的技术,因此我们讨论的所有内容都是在Java语言和环境上下文中...

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

    5. Spring如何管理Struts2和EJB3组件的生命周期,以及如何实现AOP功能。 6. 如何在Web应用中整合这三个框架,使它们协同工作。 通过深入研究这个源码示例,开发者可以提高对Java Web开发的理解,掌握多框架集成的...

    EJB3.0和Spring比较

    - Spring的声明式服务可以通过AOP(面向切面编程)实现,允许更细粒度的控制,但可能需要更多的编码工作。 6. **依赖注入(Dependency Injection)** - EJB3.0和Spring都实现了依赖注入,允许对象在运行时自动...

Global site tag (gtag.js) - Google Analytics