拦截器

CDI(Weld)高级<2> Interceptors(拦截器)

╄→尐↘猪︶ㄣ 提交于 2020-05-04 02:45:15
1.拦截器综述 拦截器的功能是定义在Java拦截器规范。 拦截器规范定义了三种拦截点: 业务方法拦截, 生命周期回调侦听, 超时拦截(EJB)方法。 在容器的生命周期中进行拦截 public class DependencyInjectionInterceptor { @PostConstruct public void injectDependencies(InvocationContext ctx) { ... } } EJB超时时使用的拦截器 public class TimeoutInterceptor { @AroundTimeout public Object manageTransaction(InvocationContext ctx) throws Exception { ... } } 在业务上,对某一个Bean的方法进行拦截 public class TransactionInterceptor { @AroundInvoke public Object manageTransaction(InvocationContext ctx) throws Exception { ... } } @AroundInvoke注释指定了要用作拦截器的方法,拦截器方法与被拦截的业务方法执行同一个java调用堆栈、同一个事务和安全上下文中。用

Hibernate4 拦截器(Interceptor) 实现实体类增删改的日志记录

∥☆過路亽.° 提交于 2020-04-13 11:08:34
【今日推荐】:为什么一到面试就懵逼!>>> 开发应用程序的过程中,经常会对一些比较重要的数据修改都需要写日志。在实际工作的工程中,这些数据都是存在表中的, 一个常见的做法是用触发器,在增删改的时候,用触发器将数据写入到另一张表中去,但个人不推荐这么做,原因如下: 1. 如果有多个表,得写很多触发器。 2. 触发器与数据库特性关联太紧,不同的数据库,虽然思路一样,但语法却不太一样。 对数据库表操作的日志记录,完全可以利用Hibernate的Interceptor特性来实现,也就是拦截器。下面用一个具体的例子来说明如何使用Hibernate的Interceptor。 创建一个表,用来记录日志的表 程序代码 Create TABLE `auditlog` ( `AUDIT_LOG_ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `ACTION` VARCHAR(100) NOT NULL, `DETAIL` text NOT NULL, `CreateD_DATE` DATE NOT NULL, `ENTITY_ID` BIGINT(20) UNSIGNED NOT NULL, `ENTITY_NAME` VARCHAR(255) NOT NULL, PRIMARY KEY (`AUDIT_LOG_ID`) ) ENGINE=InnoDB

phalapi-进阶篇3(自动加载和拦截器)

巧了我就是萌 提交于 2019-12-04 11:12:11
#phalapi-进阶篇3(自动加载和拦截器)# ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 最近工作上事情比较多所以更新比较慢希望大家见谅!这一次带来的是对于此框架自动加载机制的一个小引导,简单的聊聊是如何实现此类机制的,了解之后要如何使用,在就一同探讨一下如何使用自动加载来构建自己的公用函数以及拦截器,和如何使用拦截器,在这里在此强调一下,在进阶篇中谈论思想会比较多大家可以慢慢消化很多地方都是此框架优秀的地方,拿出来分享是为了大家更好的了解框架并且可以运用到自己的代码中去! 附上: 官网地址: http://www.phalapi.net/ 开源中国Git地址: http://git.oschina.net/dogstar/PhalApi/tree/release ##1. 自动加载机制## 关于自动加载使用phalapi框架的大家已经特别熟悉了,三层结构自动加载请求调用大家基本上感觉不到自动加载机制的存在,其实我们早就已经注册我们的文件,只是有一套完整的机制来封装这类事务让我们摸不着,我们的接口文件就是在 index.php 已经注册了 //装载你的接口 DI()->loader->addDirs(array('Demo', 'Library')); 大家不妨进入到 addDirs 里面瞧瞧 public

phalcon-进阶篇2(拦截器)

你离开我真会死。 提交于 2019-12-03 08:19:33
#phalcon-进阶篇2(拦截器)# 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 哈喽大家好啊!今天我们继续来说拦截器,拦截器在phalcon的文档里面称之为验证,但是我更喜欢叫做拦截器,拦截起主要是起到对于参数做验证的功能,如果你没有按照约定的规则来请求就报错,可以见得拦截器在请求中担当一个比较重要的地位,phalcon的拦截器能给我们带来什么新的惊喜呢?让我们来一探究竟把 注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术 附上: 喵了个咪的博客: http://w-blog.cn 教程代码库: http://git.oschina.net/wenzhenxi/Phalcon-tutorial phalcon官网地址: https://phalconphp.com phalcon中文社区: http://www.iphalcon.cn/ ##1. 拦截器对比## 买个关子,为什么一开始来不直接说是怎么实现呢?我们先来看看另外两个框架的拦截器分别是api开发框架phalapi和go框架beego phalapi 'login' => array( 'username' => array('name' => 'username', 'require' => true),

struts2的拦截器

匿名 (未验证) 提交于 2019-12-03 00:41:02
  Struts2框架的底层依赖的是XWork框架,XWork框架是命令模式的实现,提供了Action的管理,Result对象的处理以及最重要的组件“拦截器”(interceptor)。在Struts2接收request到完成响应response的过程中,struts2框架内部对功能上进行了封装,比如上传、数据验证,以及登录功能中对Action属性的赋值,都是拦截器在起作用。拦截器可以将组件进行松耦合开发。   可以在项目中创建多个拦截器,为了对拦截器有效管理,可以将它们分组,形成拦截器栈,在struts-default.xml 中就有一个名为defaultStack拦截器栈。   定义拦截器就要继承AbstractInterceptor类重写intercept()方法,进行业务处理,ActionInterceptor的invoke()主要功能就是执行Action中的内容,返回值就是result的逻辑名称。   接下来举个栗子: 先定义一个action,在struts.xml中声明为printUsername.action,result对应的页面自定义 1 package com . hyp . controller ; 2 3 /** 4 * @author hyp 5 * Project name is LearnStruts 6 * Include in com.hyp

Spring MVC拦截器实现分析

我与影子孤独终老i 提交于 2019-12-03 00:01:27
一、Servlet Filter与Spring interceptor的执行顺序 Filter有顺序吗?我们怎么控制filter的执行顺序。通过Tomcat的代码分析,servlet在Filter执行完成后才调用,如有多个filter怎么控制执行顺序,首先会想到在web.xml配置某个参数,例如order之类的,但查找一下一番,servlet并没有这个参数。试试filter Mapping的配置的先后顺序,果然有效,原来filter的执行顺序就考filter mapping在web.xml中的顺序。 spring interceptor也是这样的执行顺序,不过interceptor多一个配置参数order通过他也可以来实现interceptor的执行顺序。很多应用场景中,执行顺序还是重要的,比如cache和transaction interceptor的执行顺序,很显然cache应该在transaction之前,这样发现命中了就不用打开事务,如果transaction在前,每次都打开事务即使cache命中,这是一个无谓东动作。 二、利用springMVC的interceptor实现页面性能监控(Filter亦可) 调优第一步,找出耗时比较长的页面进行优化。利用interceptor能轻易搞定

深入字节码 -- 玩转 ASM-Bytecode

会有一股神秘感。 提交于 2019-12-02 14:32:22
本文是《 深入字节码 -- 使用 ASM 实现 AOP 》的后续博文。在上一篇文章中介绍了如何使用 ASM 动态安插代码到类中,从而简单实现 Aop。文章得到了广大朋友好评,我也希望可以不负众望继续写出可以得到大家认可的更多相关文章。废话不多 进入正题。 古语有云“工欲善其事,必先利其器”。由于 JVM 对字节码十分敏感修改过程中稍微有一丝错误都会导致虚拟机错误,而想要排查错误却是一件比较困难的事情。再加上后面的博文将会很大程度上依赖 “ASM-Bytecode” 工具。因此我觉得有必要在深入制定字节码之前介绍一下如何使用 “ASM-Bytecode” 。 首先安装Eclipse插件,插件的地址为:“http://andrei.gmxhome.de/eclipse/” 我的 Eclipse 版本为 3.7。 安装完成之后重启 Eclipse ,打开菜单 Window -> Show View -> Other... 在分类中选择 Bytecode 视图 为了测试其功能随便创建一个工程并新建一个 HalloWord 程序,在 Eclipse 中打开 “HalloWord.java” 程序查看 Bytecode 视图,你会得到下面这样的代码。 (注意:由于Bytecode会自动感知 Eclipse 编辑器中光标位置从而确定生成的代码范围因此初学者建议将光标放到 “main” 方法中)

深入字节码 -- 使用 ASM 实现 AOP

断了今生、忘了曾经 提交于 2019-12-02 14:32:09
AOP 的概念已经不是什么新鲜事物,所以我在这里就不在介绍 Aop 的概念。目前市面上要做到 Aop 是一件十分简单的事情。Spring、AspectJ、CGLib等等都可以帮助你达到目的,但是它们也只不过是一些泛生品。 上面提到了一些开源的 Aop 实现技术选型,但是我敢说无论你尝试使用上面哪种技术选型都没有我将要介绍的这种方式的运行效率最高。不过读者不要高兴的太早,读完本文想必你就知道是什么原因了。 介绍一款工具ASM,下面是( http://www.ibm.com/developerworks/cn/java/j-lo-asm30/ )内容的一个节选。 ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。 可以负责任的告诉大家,ASM只不过是通过 “Visitor” 模式将 “.class” 类文件的内容从头到尾扫描一遍。因此如果你抱着任何更苛刻的要求最后都将失望而归。上面我们介绍的那些 Aop