java与java ee_Java EE拦截器

java与java ee

历史

我认为重要的是要看一下Java EE中Interceptor的发展,因为它是从EJB特定的项目开始的,后来又演变成一个单独的规范,现在可供其他Java EE规范扩展,这一事实很简单。

版本1.0

拦截器最初是在EJB 3.0 ( Java EE 5的一部分)中引入的。 拦截器没有专门的规范,但是它们的版本为1.0,并通过简单的注释向托管Bean(POJO)购买了与AOP相关的基本功能:

  • @AroundInvoke –注释包含目标类方法的拦截逻辑的方法
  • @Intercerptors –将拦截器类与其目标类/方法绑定在一起
  • 通过部署描述符为整个模块(EJB JAR)配置拦截器的能力
  • @ExcludeDefaultInterceptors –使部署描述符中定义的默认拦截器静音
  • @ExcludeClassInterceptors –使类的特定方法/构造函数的全局定义(类级别)拦截器静音

拦截器1.1

随之而来的是带有EJB 3.1的 Java EE 6 –拦截器1.1仍包含在EJB规范文档中:

  • @InterceptorBinding –一种指定类或方法的拦截器的类型安全方法。 请注意,此注释由CDI 1.0 (Java EE 6中引入的另一个规范)所利用,并且其详细信息位于CDI 1.0规范文档中,而不是EJB 3.1中 (至少对我来说是灯泡时刻)。
  • @Interceptor –用于在特定方法中显式声明一个包含拦截逻辑的类(用@AroundInvoke注释)作为拦截器以及适当的Interceptor Binding。 仅在CDI 1.0文档中也提到了这一点。
  • @AroundTimeout –用于拦截EJB计时器的超时以及获得被拦截的Timer实例的方式(通过javax.interceptor.InvocationContext.getTimer()

拦截器1.2

拦截器在Java EE 7中被拆分成单独的规范,因此拦截器1.2应运而生:

  • 拦截器1.2是1.1的维护版本,因此JSR编号仍然与EJB 3.1( JSR 318 )相同。
  • Interceptor.Priority (静态类)–提供定义拦截器需要被调用的顺序(优先级)的能力。
  • @AroundConstruct –用于拦截目标类的构造,即在调用目标类的构造函数之前先调用逻辑

重要的是要记住,拦截器通常适用于托管bean。 托管Bean本身是简单的POJO,容器已将其授予基本服务–拦截器是其中之一,包括生命周期回调,资源注入。

记忆辅助

将Interceptor视为可以在其整个生命周期中插入到bean的组件是有帮助的:

  • 在构建它们之前– @AroundConstruct
  • 构造之后– @PostConstruct
  • 在他们的生命中(方法调用)– @AroundInvoke
  • 销毁之前– @PreDestroy
  • EJB超时– @AroundTimeout

让我们更详细地了解拦截器的一些特征,并尝试回答以下问题:

  • 它们在哪里应用,它们拦截了什么?
  • 如何将拦截器绑定到应该拦截的目标(类)?

拦截器类型(基于拦截的组件)

方法拦截器

  • @AroundInvoke实现
  • 包含逻辑的方法可以是单独类的一部分,也可以是目标类(要拦截的类)本身的一部分。

生命周期回调拦截器

  • @AroundConstruct装饰方法,以拦截类的构造函数调用
  • 用@AroundConstruct注释的方法不能是所拦截类的一部分。 必须使用单独的Interceptor类定义它
  • 在方法上使用@PostConstruct批注,以拦截托管bean上的回调方法。 再次说明一下-拦截器规范并未这样定义新的注释。 需要在拦截器方法上重用@PostConstruct( 公共注释规范的一部分 )。
  • @PreDestroy (在Common Annotations规范中定义的另一个回调注解)注解以类似的方式使用

超时拦截器

  • 如上所述, @ AroundTimeout用于拦截EJB计时器的超时以及获取被拦截的Timer实例的方式(通过javax.interceptor.InvocationContext.getTimer()

应用/绑定拦截器

使用@Interceptors

  • 如以上示例所示–只需使用@Interceptors批注指定拦截器类
  • @Interceptor可以在类级别上应用(自动适用于类的所有方法),如果使用@AroundConstruct进行特定于构造函数的拦截器,则可以应用于特定方法或多个方法和构造函数

使用@IntercerptorBinding

  • 拦截器绑定(如上所述)–使用@IntercerptorBinding批注定义一个绑定批注,该批注在侦听器类和目标类中将进一步使用(需要拦截其方法,构造函数等)

部署描述符

人们还可以使用部署描述符以明确的方式以及以覆盖模式将注释器和目标类绑定到注释。

这是Java EE拦截器的快速概述。 希望您找到更深层次的正确触发!

翻译自: https://www.javacodegeeks.com/2015/01/java-ee-interceptors.html

java与java ee

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python怎么查询元素是否在列表中_python怎么判断某一元素是否在列表中

定义一个列表,并判断元素是否在列表中。python学习网,大量的免费python基础教程,欢迎在线学习!例如:test_list [ 1, 6, 3, 5, 3, 4 ]print("查看 4 是否在列表中 ( 使用循环 ) : ")for i in test_list:if(i…

python中带附件发送电子邮件_python发送带附件邮件

Python SMTP发送邮件SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。Python创建 SMTP 对象…

jpa 实体图查询_JPA实体图

jpa 实体图查询JPA 2.1的最新功能之一是可以使用实体图指定获取计划。 这很有用,因为它允许您自定义使用查询或查找操作检索的数据。 在使用中大型应用程序时,通常以不同的方式显示来自同一实体的数据。 在其他情况下,您只想选择最小的信息集…

C语言程序控制语句——while

while语句while (表达式) 语句当表达式为非0值(真)时,执行while循环体中的语句,如此往复,直到表达式的值等于0(假),循环结束。如以下示例程序,循环…

kettle 资料_Kettle的使用-初级

本文从kettle的简介、下载、安装、初级使用来展开。1.kettle是什么?kettle是一款开源的ETL工具。可以运行在Windows和linux上。2.下载地址https://community.hitachivantara.com/s/article/downloads3.安装因为Kettle是基于Java开发的,所以要先安装jdk环…

python抢货程序_写个Python程序上下班抢个顺风单

#!/usr/bin/python# -*- coding: gb2312 -*-##########################################################################2015-12-11 09:47:46#author: 358275018qq.com#使用Python2.6/7######################################################################### 有些库没…

C语言 | 语句概述

C语言语句的作用和分类1、9种控制语句if()...else.. //条件语句 for()... //循环语句 while()... //循环语句 do...while() //循环语句 continue //结束本次循环语句 break //中止执…

react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...

react性能优化方案在我以前的文章中,我研究了一个虚拟的交易引擎,并将基于Java的阻止解决方案与基于Node.js的非阻止解决方案进行了比较。 在文章的结尾,我写道: 我怀疑随着Node.js的最近成功,越来越多的异步Java库将…

linux 查看日志_干货 | 名企高频考点之谈谈Linux日志查看方式都有哪些

点击蓝字关注我哦以下是本期干货视频视频后还附有文字版本哦▼《名企高频考点-谈谈Linux日志查看方式都有哪些》▼ps:请在WiFi环境下打开,如果有钱任性请随意0.概述在我们面试各大公司的时候,关于Linux往往最容易问到的问题之一就是Linux指令…

vsm java_java – 我尝试使用JAXB将对象编组到xml文件中时,错误为“缺少@XmlRootElement注释”...

我是刚刚开始使用JAXB的人,所有我需要的是将对象写入xml并在某些时候将其读回java这是我的班级:public class VSM implements java.io.Externalizable{ArrayList termList; //Term DictionaryArrayList queryTermList; //Query listArrayList> docLists;ArrayLis…

jvm7 jvm8_自我修复的JVM

jvm7 jvm8这篇帖子是关于一个应用程序的示例,其中解决每个IT问题的第一个解决方案-“您是否尝试过将其关闭并重新打开”-可能适得其反,弊大于利。 我们不需要关闭电源,而是拥有可以自愈的应用程序:它在一开始就失败了&#xff0c…

实例讲解C语言的位运算

C语言位运算有6种&#xff1a; &&#xff0c; | , ^(异或)&#xff0c; <<(左移)&#xff0c;>>(右移)。注意&#xff1a;参与位运算的元素必须是int型或者char型&#xff0c;以补码形式出现。1.按位与&&运算常应用于&#xff1a;迅速清零保留指定位判…

python3解释器执行not 1 and 1_编程语言的分类,python解释器多版本共存.执行python的两种方式,变量,用户与程序交互...

一、编程语言的分类&#xff1f;机器语言&#xff1a;直接使用二进制指令编程&#xff0c;直接操作硬件&#xff0c;必须考虑硬件细节。汇编语言&#xff1a;用简写的英文标识符取代二进制去编写程序&#xff0c;直接操作硬件&#xff0c;必须考虑硬件细节。高级语言&#xff1…

java字节码执行原理_《Java 底层原理》Java 字节码详解

前言我们在开发中会遇到一些Java的执行超出我们的想象&#xff0c;但是又不知道他为什么会这样执行&#xff0c;这个时候我们就需要能够知道他编译后Class文件是什么样子的&#xff0c;并且理解字节码的含义。Java字节码的原理进制class文件就是字节码文件&#xff0c;直接是打…

C语言学习笔记--位运算

这一节主要说的是位运算&#xff0c;计算机中的执行速度&#xff1a;位运算 > 加减 > 乘除 > 求余位运算就是将数字转换成二进制后进行运算&#xff0c;之后再将数字转换成原来的进制与运算&#xff1a;当两个数相与时&#xff0c;只有都为l的时候结果才为1&#xff0…

openshift学习_在OpenShift上将JMS与JBoss A-MQ结合使用。 学习了有关远程客户端和加密的经验。...

openshift学习OpenShift是“红帽开发的开放式混合云应用程序平台”。 它具有不同的风格&#xff0c;对于大多数您想做的事情&#xff0c;最有趣的部分是公共云应用程序开发和托管平台“ OpenShift Online ”。 您可以轻松地尝试一下&#xff0c;因为在云中使用OpenShift Online…

mathtype运行时错误48_在office中无法使用MathType该怎么办?

想必大家都遇到过在office中无法使用MathType的情况&#xff0c;那么遇到这种情况的话大家应该怎么来解决呢&#xff1f;首先这样的现象一般为&#xff1a;word或者ppt中没有mathtype选项&#xff0c;或者选项打开提示文件未找到&#xff1a;MathPage.WLL。错误提示或者甚至运行…

谈谈C语言中的杂项运算符

在C语言中&#xff0c;还有一些重要的运算符&#xff0c;例如&#xff1a;sizeof()、&、* 、 ?: 。我们把上述的这些运算符归为杂项运算符&#xff0c;下面我将详细介绍这些杂项运算符。下面的表格列出了 C 语言支持的所有杂项运算符&#xff1a;运算符解释例子sizeof()返…

java集合的添加方法_深入理解java集合框架之---------Arraylist集合 -----添加方法

Arraylist集合 -----添加方法1、add(E e) 向集合中添加元素/*** 检查数组容量是否够用* param minCapacity*/public void ensureCapacity(int minCapacity){modCount;int oldCapacity elementData.length;if(minCapacity > oldCapacity){Object oldData[] elementData;int…

jenkins java_具有WildFly,Arquillian,Jenkins和OpenShift的Java EE 7部署管道

jenkins java技术提示&#xff03;54展示了如何Arquillianate&#xff08;Arquillianize&#xff1f;&#xff09;一个现有的Java EE项目并在WildFly在已知主机和端口上运行的远程模式下运行这些测试。 技术提示&#xff03;55展示了当WildFly在OpenShift中运行时如何运行这些测…