博客
关于我
EJB学习笔记六(EJB中的拦截器)
阅读量:805 次
发布时间:2023-01-24

本文共 1793 字,大约阅读时间需要 5 分钟。

今天,我想分享一下关于EJB(Enterprise Java Beans)中的拦截器(Interceptor)实现的探讨。一、拦截器的基本概念听到“拦截器”这个词,听起来并不陌生,尤其是在Servlet规范中,拦截器的概念得到了充分的应用。EJB3也 forn了拦截器的支持,这在本质上实现了轻量级的AOP(面向切面编程)。拦截器的作用是将通用逻辑从具体业务方法中抽离出来,这样可以实现代码的复用。常见的拦截器注解还包括螺旋型的编程方式,对开发者来说是个非常实用的能力。二、EJB中的拦截器实现在EJB中实现拦截器,与Spring中的AOP实现有显著的不同。Spring提供了丰富的注解(如`@Before`、`@AfterReturning`、`@AfterThrowing`等),这些注解允许开发者定义丰富的增强逻辑。而在EJB的实现中,拦截器的功能相对比较有限,仅提供一个`@AroundInvoke`注解进行使用。三、拦截器的定义与应用在EJB中定义拦截器非常简单,只需在拦截器方法上使用`@AroundInvoke`注解即可。以下是完整的拦截器类示例:```javapackage com.Interceptor;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");        }    }}

这个拦截器类仅需实现带有InvocationContext参数的方法,签名必须是public Object XXX(InvocationContext ctx) throws Exception,就可以实现拦截功能。

四、在实际应用中使用拦截器

在实际应用中使用拦截器,只需在目标EJBBean的类上使用@Interceptors注解即可。部分方法可以通过@ExcludeClassInterceptors注解来排除某些特定的拦截器逻辑。需要注意的是,拦截器对于性能有一定的影响,因此在实际应用中需要适当设计并限定拦截器的执行范围。

通过以上内容可以看出,EJB中的拦截器实现相对简单,仅需编写一个符合特定注解格式的拦截器类即可。这种简单易用的拦截器机制为EJB开发提供了灵活的增强能力。

总的来说,创建一个拦截器类非常简单,无需继承特定基类或实现特定接口,只需使用@AroundInvoke注解即可实现通用方法的拦截。要实现特定的拦截作用,只需针对目标方法或类进行注解即可实现。这个特性使得EJB3的拦截器机制非常灵活且实用。

转载地址:http://vheyk.baihongyu.com/

你可能感兴趣的文章
Netty遇到TCP发送缓冲区满了 写半包操作该如何处理
查看>>
netty(1):NIO 基础之三大组件和ByteBuffer
查看>>
Netty:ChannelPipeline和ChannelHandler为什么会鬼混在一起?
查看>>
Netty:原理架构解析
查看>>
Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
查看>>
Network Sniffer and Connection Analyzer
查看>>
Network 灰鸽宝典【目录】
查看>>
Networkx写入Shape文件
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
network小学习
查看>>
Netwox网络工具使用详解
查看>>
Net与Flex入门
查看>>
net包之IPConn
查看>>
net发布的dll方法和类显示注释信息(字段说明信息)[图解]
查看>>
Net操作配置文件(Web.config|App.config)通用类
查看>>
NeurIPS(神经信息处理系统大会)-ChatGPT4o作答
查看>>
neuroph轻量级神经网络框架
查看>>
Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
查看>>
NEW DATE()之参数传递
查看>>