EJB+Annotation实现AOP

jboss aop JBoss AOP Manual 立即下载


之所以介绍Jboss AOP,是因为我们的项目要用,项目采用的是ejb,需要使用AOP插入一层,来记录系统日志,后期可能还要插入一层缓存,和安全控制方面的东西。

项目驱动学习嘛,因为我们的应用服务器选择的是jboss,自然要使用jboss自己比较成熟的框架,JBoss AOP

Jboss AOP是一个以Aspected为核心的框架,可用在任何编程环境或与我们的应用服务器紧密集成。面向切面编程(AOP)能让我们更轻松地模块化代码库,很多时候能轻松解决面向对象(OO)不容易解决的问题。Jboss AOP使用JDK 1.5注解,而不是使用单独地注释代码生成java代码。


语言总是乏力,让demo来陈述事实吧。


列举主要类,其他代码 点击这里下载。

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. @Stateless  
  2. public class UserManageImpl implements UserManage {  
  3.       
  4.     @AroundInvoke //类内部拦截器1  
  5.     public Object myInterceptor1(InvocationContext ic) throws Exception    
  6.     {    
  7.         System.out.println("myInterceptor-----------1-------------:" + ic.getMethod().getName());    
  8.         return  ic.proceed();        
  9.     }    
  10.     @AroundInvoke //类内部拦截器2  
  11.     public Object myInterceptor2(InvocationContext ic) throws Exception    
  12.     {    
  13.         System.out.println("myInterceptor-----------2-------------:" + ic.getMethod().getName());    
  14.         return  ic.proceed();   
  15.     }    
  16.      @Override  
  17.     public String sayHello(String userName) {  
  18.         // TODO Auto-generated method stub  
  19.         return "hello!@"+userName;  
  20.     }  
  21.     
  22.   @Override  
  23.     public String greet(User user) {  
  24.         // TODO Auto-generated method stub  
  25.         return "greet!@"+user.getName();  
  26.     }  
  27.     
  28.     @Override  
  29.     public User getUser() {  
  30.         // TODO Auto-generated method stub  
  31.         User user=new User();  
  32.         user.setName("贾琳");  
  33.         return user;  
  34.     }  
  35.       
  36. }  


Stateless Session Bean中定义了两个拦截器方法和三个普通的bean方法,分别是myInterceptor1和myInterceptor2。当客户端调用sayHello,greet,getUser方法时,EJB容器会先调用myInterceptor1,然后会调用myInterceptor2方法,最后会调用Bean方法。使用拦截器方法时要注意如下几点:

1.  拦截器方法必须有一个返回值,返回值类型是Object。

2.  拦截器方法只能有一个参数,而且该参数类型必须是javax.interceptor.InvocationContext。

3.  只有调用InvocationContext接口的proceed方法,EJB容器才会调用下一个拦截器方法或被拦截的Bean方法。


类内部的拦截器,不推荐使用,插拔不方便,而且放到业务逻辑类中,总感觉那么不伦不类。

下面介绍的是外部的拦截器类,可以拦截不同Bean中的方法, 这点把aop思想发挥到了极致。 。
在这种情况下,需要将拦截器方法放在一个单独的类中。这个类就叫拦截器类。下面是一个拦截器类的代码:

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. //拦截器1  
  2. public class UserInterceptor1 {  
  3.     @AroundInvoke  
  4.     public Object interceptorMethod(InvocationContext ic) throws Exception {  
  5.         System.out.println("UserInterceptor-----------1-------------:" + ic.getMethod().getName());  
  6.         return ic.proceed();  
  7.     }  
  8. }  
  9.   
  10. //拦截器2  
  11. public class UserInterceptor2 {  
  12.     @AroundInvoke  
  13.     public Object interceptorMethod(InvocationContext ic) throws Exception {  
  14.         System.out.println("UserInterceptor-----------2-------------:" + ic.getMethod().getName());  
  15.         return ic.proceed();  
  16.     }  
  17. }  
  18.   
  19.   
  20. @Stateless  
  21. @Interceptors({UserInterceptor1.class, UserInterceptor2.class})   //多个外部拦截器类  
  22. //@Interceptors(UserInterceptor1.class)   // 一个外部拦截器  
  23. public class UserManageImpl implements UserManage {  
  24.       
  25.     @AroundInvoke //类内部拦截器1  
  26.     public Object myInterceptor1(InvocationContext ic) throws Exception    
  27.     {    
  28.         System.out.println("myInterceptor-----------1-------------:" + ic.getMethod().getName());    
  29.         return  ic.proceed();        
  30.     }    
  31.   
  32.     @AroundInvoke //类内部拦截器2  
  33.     public Object myInterceptor2(InvocationContext ic) throws Exception    
  34.     {    
  35.         System.out.println("myInterceptor-----------2-------------:" + ic.getMethod().getName());    
  36.         return  ic.proceed();   
  37.     }    
  38.    
  39.     @ExcludeClassInterceptors    //阻止拦截器类中的拦截器方法对Bean方法的拦截  
  40.   @Override  
  41.     public String sayHello(String userName) {  
  42.         // TODO Auto-generated method stub  
  43.         return "hello!@"+userName;  
  44.     }  
  45.   
  46.    @Override  
  47.     public String greet(User user) {  
  48.         // TODO Auto-generated method stub  
  49.         return "greet!@"+user.getName();  
  50.     }  
  51.   
  52.    @Override  
  53.     public User getUser() {  
  54.         // TODO Auto-generated method stub  
  55.         User user=new User();  
  56.         user.setName("贾琳");  
  57.         return user;  
  58.     }  
  59.       
  60. }  

从上面的类中,可以看到:
@Interceptors({UserInterceptor1.class, UserInterceptor2.class})   //多个外部拦截器类, 这个注解完成了拦截器的插入。
@ExcludeClassInterceptors    //不需要拦截的方法,即该注解阻止拦截器类中的拦截器方法对Bean方法的拦截

如果指定了多个拦截器类和拦截器方法,就涉及到一个调用顺序的问题。EJB容器会先调用拦截器类中的拦截器方法、如果有多个拦截器类被指定,按指定的顺序进行调用。按UserManageImpl 的注解,UserInterceptor1 类中的拦截器方法,接着是UserInterceptor2。最后会调用在Bean中定义的拦截器方法myInterceptor1和myInterceptor2。

代码很简单,加几个注解就OK。其他代码 点击这里下载。
如果需要更详细的内容,去jboss官网吧, http://www.jboss.org/jbossaop/

不得不赞叹,能写AOP框架的人很牛,能提炼出AOP思想的人更牛。
从代码中,可以清晰的看到,AOP使应用程序逻辑和系统架构代码更清洁地分离,而且插拔非常方便。我们可以很轻松地插入 缓存,异步通信,事务,安全等许多许多功能模块。

这也给我们合作开发提供了很大便利,开发人员可以分为两种,一种专门负责应用程序业务逻辑的开发,而另一种专门负责系统环境的开发,如日志,权限,缓存等等。
秋叶ComfyUI-v10中文整合包:全中文AI绘画一键部署与实战指南 Stable Diffusion作为当前主流的扩散模型,通过去噪过程从随机噪声生成高质量图像,其开源特性推动了AI绘画技术的普及。然而,其官方WebUI在自定义工作流和可复现性上存在局限,而基于节点流程的ComfyUI则提供了更高的自由度和工程化控制能力,尤其适合复杂、可重复的创作流程。对于中文用户而言,英文界面和提示词输入是主要障碍。秋叶出品的ComfyUI-v10中文整合包,正是针对这一痛点,提供了**全中文界面**和**原生中文提示词支持**的解决方案。该整合包将Python环境、依赖库及常用插件预配 阅读详情

相关推荐

软考高级,信息系统项目管理师(高项)经验分享

软考高级,信息系统项目管理师(高项)经验分享 2020-12-21信息系统项目管理师(俗称高项)成绩出来了54,55,47,终于成为高级工程师了。 本文以编写整体管理论文的格式进行,将分为项目启动、项目计划、项目执行、项目检查、项目收尾5个过程回顾高项的考试历程,希望对其他同学有借鉴意义。个人觉得可能对于一次考不过的人参考价值比较大。 第一阶段、项目启动阶段Start——决定考哪个科目。 如图,高级资格的类型有:信息系统项目管理师、系统分析师、系统架构设计师、......

zcheva的专栏 5万+

@AroundInvoke、@AroundTimeout、@AroundConstruct源码翻译

package javax.interceptor; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.ElementType; import java.lang.annotation.Target; import java.lang.annotation.Retention; /** * 目的

爱我所爱0505 1133

鼎捷T100——二次开发:维护作业添加非实体字段

非实体字段添加

weixin_52342654的博客 1160

java around_java – @AroundInvoke拦截器在@WebService类上被调用两次

摘要在@WebService类上调用@AroundInvoke拦截器两次,如果截取的方法是通过端点作为SOAP Web服务从应用程序外部调用的.如果从另一个bean内部调用相同的方法,它只被调用一次(正如我所料).截获的方法本身始终只调用一次!问题1:我可以只拦截一次拦截器吗?问题2:如果我不能,是否有可转移的(服务器独立的)方式来决定我在哪个拦截器中,那么我可以忽略多余的拦截器?问题3:这种行为...

weixin_34023073的博客 533

【STABLE_BASELINE3】强化学习算法实战:模型的保存,读取,再训练

STABLE-BASELINE3,模型读取,再训练:有时候需要在已经训练好的模型基础上进行再次训练。

Kiek17的博客 4868

【全覆盖算法】栅格地图实现布氏单元分解算法+栅格地图实现牛耕Boustrophedon Cellular Decomposition Path Planning

本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 282

java ee拦截器_Java EE拦截器

java ee拦截器历史 我认为重要的是要看一下Java EE中Interceptor的发展,因为它是从EJB特定的项目开始的,后来又演变成一个单独的规范,现在可供其他Java EE规范扩展,这一事实很简单。 版本1.0 拦截器最初是在EJB 3.0 ( Java EE 5的一部分)中引入的。 拦截器没有专门的规范,但是它们的版本为1.0,并通过简单的注释向托管Bean(POJO)购买了与AO...

cunfen3485的博客 367

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

会话EJB系列(五)拦截器

EJB3的拦截器是一种轻量级AOP机制,和Spring框架中的AOP如出一辙。 而且使用极为简单,开发者只需要如下步骤即可: (1)定义一个普通类。如何把它标记为拦截器类呢?只需要使用@AroundInvoke修饰一个具有public Object ****(InvocatonContext cxt) throws Exception签名的方法即可。 (2)在所有被拦截的EJB3的Bean实现类、业务方法上使用@Interceptors修饰 (3)如果想在EJB中某个方法中不使用拦截器,则

chestnut 2453

二极管钳位电路、限幅电路和检波电路Multisim电路仿真

本文系统介绍了二极管钳位、限幅和检波三种基础电路的工作原理及Multisim仿真验证。钳位电路通过电容-二极管配合实现波形整体平移,将波峰或波谷固定在指定电压;限幅电路利用二极管导通特性削除信号超出设定阈值的部分;检波电路则通过半波整流和电容滤波从调幅波中提取音频信号。三种电路均通过Multisim仿真验证了理论分析结果,展示了二极管在信号处理中的关键作用。这些基础电路广泛应用于信号调理、电平保护和通信解调等领域。

XU157303764的博客 1122

深入解析:武汉光庭信息技术 Android CarPlay 开发岗位的技术要求与面试准备(大连)

武汉光庭信息大连分部招聘Android CarPlay开发工程师,要求专科以上学历及2年以上Android开发经验,需精通CarPlay集成技术与车载系统开发。该职位涉及Android底层框架修改、CarPlay协议实现及车规级系统开发,需处理USB/HID驱动、图形合成等技术难点,并确保通过Apple严格认证。求职者需具备扎实的Android开发能力,熟悉车载环境特殊性,包括系统稳定性保障、人机交互适配等技术要点。文章深度解析了职位技术内涵,并提供面试问题与参考答案,帮助求职者全面准备这一复合型技术岗位。

郑伟强dev的专栏 400

EJB3,我们究竟得到了什么 (2)

皇帝的新装          JSR220规范书由三个部分组成:EJB 3.0 Simplified API,EJB Core Contracts and Requirements和Persistence API。在Persistence API规范书里,可以发现,EJB翻天覆地的变化是在它的持久方案上。一个所谓"透明持久方案",一个ORM的引擎。这里,我们会很容易想到Hibernate这个大名

信华的专栏 2407

【小白深度教程 1.3】使用 BP-Net 深度补全网络,进行 KITTI 稠密点云和图像融合(Depth Completion 实战)

在上一节中,我们展示了如何将从激光雷达获取的稀疏点云(深度)映射到图像。因此这篇论文我们尝试使用 Depth Completion(深度补全)技术,来将稀释的点云深度,补全为稠密深度。

2401_87064292的博客 1199

ejb3工程需要的包

EJB3.0需要的包假设jboss安装位置为D:/jboss-4.0.4.GA;D:/jboss-4.0.4.GA/client1.jbossall-client.jar2.jboss-annotations-ejb3.jarD:/jboss-4.0.4.GA/server/all/deploy/ejb3.deployer3.jboss-annotations-ejb3.jar4.jb

※§STATIC§※ 734

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

annotation

看看编程语言发展 一开始只是函数的封装,    到了OO语言,对象有了自己的属性和方法。    到了框架满天飞的年代,这些属性和方法又有了自己的属性,来告诉框架如何为自己提供服务。比如Spring和EJB3,POJO就用配置信息来告诉框架进行无侵入服务提供(如事务)和依赖注入。     整个过程非常的自然,程序员用以描述系统的语言越来越详细。所以Annotation普一推出就受到了热烈追捧。那

Narci的专栏 1048

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

EJB3拦截器(Interceptor)

可以说拦截器是AOP在EJB world里面的实现,拦截器可以用于SesstionBean和Message Driven Bean。拦截器可以用Descriptor file或者annotation来实现,但是基本上我们都是用annotation来实现。拦截器可以用来

Crack The World 1318

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java元数据小解

元数据是关于数据的数据。在编程语言上下文中,元数据是添加到程序元素如方法、字段、类和包上的额外信息。 元数据的作用   一般来说,元数据可以用于创建文档,跟踪代码中的依赖性,执行编译时检查,代码分析。 元数据还可用于协助程序元素与框架或者EJB、EMF 和 TestNG这样的工具之间的通信。EJB 3.0就广泛地应用了Java元数据,通过元数据来实现声明性请求企业服务,依赖性以及资源注入,消

shangruo的专栏 545

EJB2和EJB3在架构上的不同点

EJB编程模型的简化 首先,EJB3简化的一个主要表现是:在EJB3中,一个EJB不再象EJB2中需要两个接口一个Bean实现类,虽然我们以前使用JBuilder这样可视化开发工具自动生成了EJB2的这三个类,好像不觉得复杂,但是当EJB个数增加时,就显得累赘了。 简化后的EJB3的sessionBean依靠annotations元注释来定义SessionBean的类型,也就是说,EJB2中的Se...

jardownload的博客 192

AOP-Android-AspectJ使用

一. 介绍 以下介绍的其中部分内容是摘抄修改自网络: AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 它并没有帮助我们解决任何新的问题,它只是提供了一种更好的办法,能够用更少的工作量来解决现有的一些问题,并且使得系统更加健壮,可维护性更好。同时,它让我们在进行系统架构和模块设计的时候多了新的...

ddxxii的博客 2413

EJB3与EJB2架构对比

转载于:http://www.jdon.com/artichect/EJB2_EJB3.html PS:简单的讲就这三点主要的区别 1.EJB3编程模式简化 引入了IOC(依赖注入)的功能,简化开发代码 2.JPA替代实体bean java persistence API 替代了EJB2的实体bean;EJB3引入了EntityManger进行需要持久实体的查询、新增、修改...

xiaoheliushuiya 76

实战角度比较EJB2和EJB3的架构异同

】     EJB编程模型的简化     首先,EJB3简化的一个主要表现是:在EJB3中,一个EJB不再象EJB2中需要两个接口一个Bean实现类,虽然我们以前使用JBuilder这样可视化开发工具自动生成了EJB2的这三个类,好像不觉得复杂,但是当EJB个数增加时,就显得累赘了。     简化后的EJB3的sessionBean依靠annotations元注释来定义SessionBean的类型...

weixin_33675507的博客 179

EJB3.0与Spring

总的来看Spring+Hibernate与JPA很相似,它们都是基于pojo的持久化。 Hibernate Session和JPA Entity Manager基本上等价,但是要记住他们的两个重要区别。        Hibernate session是一个实体缓存也是一个ORM引擎的接口。        而JPA中这两个概念是分开的。Persistence context作为缓存而

步春良 4894

面向方面编程的Annotation简介

Annotation概述     首先让我们给出这两项技术的一个概述。Annotation是JDK5.0的新功能,它在JSR-175规范中有详细定义。它们允许您以安全的方法定义元数据并应用到类,方法,构造程序,字段或参数中。对于你们中熟悉XDoclet的人来说,Annotation将非常直观,您可以用来声明标签以产生代码。两者的主要不同是Annotation是Java语言的一部分而XDoclet标...

Future is in your hands, believe it!! 162

Spring与EJB对比(转)

今天TSS和InfoQ都转了一篇Spring与EJB3的读后感,我就看了下,标题和介绍满吸引人的。内容嘛其实有点不过瘾,但是先记录下来吧。http://www.devx.com/Java/Article/32314/0/page/1总的来看Spring+Hibernate与JPA很相似,它们都是基于pojo的持久化。Hibernate Session和JPA Entity Manager基本上等价

liuxilil的专栏 1333

AOP/CGLIB学习:实现简单的注解权限系统(Annotation+拦截器)

注: 本文只是原理性质, 并不实用, 读者可用成熟稳定的开源权限系统如SpringSecurity. 但可参考实现自己的一些小框架.  在上课的时候, 一位同学拿着一篇JavaEye的很长的CGLIB讲解代码来问我这是怎么回事?我看了下, 觉得那样的例子实在太让人难以一下子看懂了, 于是就自己重造了个轮子.  Spring 2.5最大的亮点就是基于注解实现配置, 其实这个谈不上什么亮点,

ETHAN IN IT 2864

面向方面的Annotation

面向方面的Annotation作者:Bill Burke,Enterprise JavaBeans 第四版合著者 译者:yahveyeye版权声明:任何获得Matrix授权的网站,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明作者:Bill Burke;yahveyeye原文地址:http://www.onjava.com/pub/a/onjava/2004/08/25/aoa.htm

514
上一篇: JNDI之java:comp/env
下一篇: 有效的ejb 和 反模式的那些事 热土豆 金锤子 等
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值