Java实现的拦截器

Java实现的拦截器

拦截器在在流行的开源框架中很常见,依赖的技术就是Java的动态代理。
  理解拦截器的核心原理对理解这些开源框架的体系结构至关重要。
  下面以一个简单的模型的来说明拦截器的实现的一般方法。
  模型分为以下模块:
  业务组件:是被代理和被拦截的对象。
  代理处理器:实现了InvocationHandler接口的一个对象
  代理对象:Proxy对象。
  拦截器:普通的JavaBean,在调用业务方法的之前或者之后会自动拦截并执行自己的一些方法。


  客户端:执行业务处理的入口。
  以下是模型的实现
  一、业务组件:分为业务接口和业务类
  /**
  * 业务组件接口
  */
  public interface BusinessInterface {
  public void doSomething();
  }
  /**
  * 业务组件
  */
  public class BusinessClass implements BusinessInterface{
  public void doSomething() {
  System.out.println("业务组件BusinessClass方法调用:doSomething()");
  }
  }
  二、代理处理器:包含了业务对象绑定动态代理类的处理,并实现了 InvocationHandler接口的invoke方法。
  import java.lang.reflect.InvocationHandler;
  import java.lang.reflect.Method;
  import java.lang.reflect.Proxy;
  /**
  * 动态代理处理器工具
  */
  public class DynamicProxyHandler implements InvocationHandler {
  private Object business;    //被代理对象
  private InterceptorClass interceptor = new InterceptorClass();    //拦截器
 /**
  * 动态生成一个代理类对象,并绑定被代理类和代理处理器
  *
  * @param business
  * @return 代理类对象
  */
  public Object bind(Object business) {
  this.business = business;
  return Proxy.newProxyInstance(
  //被代理类 的ClassLoader
  business.getClass().getClassLoader(),
  //要被代理 的接口,本方法返回对象会自动声称实现了这些接口
  business.getClass().getInterfaces(),
  //代理处理 器对象
  this);
  }
  /**
  * 代理要调用的方法,并在方法调用前后调用连接器的方法.
  *
  * @param proxy  代理类对象
  * @param method 被代理的接口方法
  * @param args   被代理接口方法的参数
  * @return 方法调用返回的结果
  * @throws Throwable
  */
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  Object result = null;
  interceptor.before();
  result=method.invoke(business,args);
  interceptor.after();
  return null;  //To change body of implemented methods use File | Settings | File Templates.
  }
  }
  三、拦截器:普通的JavaBean,在调用业务方法的之前或者之后会自动拦截并执行自己的 一些方法。
  /**
  * 拦截器
  */
  public class InterceptorClass {
  public void before(){
  System.out.println("拦截器InterceptorClass方法调用:before()!");
  }
  public void after(){
  System.out.println("拦截器InterceptorClass方法调用:after()!");
  }
  }
  四、模拟客户端:执行业务处理的入口。
  /**
  * 客户端
  */
  public class Client {
  public static void main(String args[]) {
  DynamicProxyHandler handler = new DynamicProxyHandler();
  BusinessInterface business = new BusinessClass();
  BusinessInterface businessProxy = (BusinessInterface) handler.bind(business);
  businessProxy.doSomething();
  }
  }

Java拦截器实现深度解析 Java拦截器是一种设计模式,它允许开发者在不修改原有代码的情况下,拦截方法调用或消息传递,进行预处理或后处理。通过拦截器,可以轻松实现日志记录、权限检查、事务管理等横切关注点的处理。Java接口(Interface)是Java语言中一种引用类型,是方法特征的集合,一个接口可以包含多个方法。在Java中,接口是抽象方法和常量值定义的集合,是一组抽象方法的声明,这些抽象方法由实现接口的类提供具体实现。接口的作用在于它定义了类必须实现的方法,从而保证了类之间的一致性和规范性。 阅读详情

相关推荐

USC EE450 CSCI455 CSCI571 Midterm 总结

EE450 Compter Network                1.历年Midterm考题。(更新至2017年spring,如果大家有新的资源欢迎编辑)                 google drive:https://drive.google.com/drive/folders/0B_LCDxpiiXZ1cUNReFpZZHo4NG8?usp=sharing

Small_hour 7112

如何编写拦截器?

拦截器是指在处理请求或响应数据之前,先对其进行拦截并进行一些自定义的处理,常用于实现权限认证、数据统计等功能。以上是Java编写拦截器的基本步骤,具体实现可根据项目需求进行调整。

mc_ChenF_B的博客 1105

HFSS微带线仿真从零到一:材料参数与求解设置优化指南

在射频电路设计中,微带线仿真涉及电磁场求解与传输线理论,其精度高度依赖材料参数和求解设置。相对介电常数、损耗角正切和导体电导率等参数直接影响特性阻抗与插入损耗,而求解频率、网格划分和参数扫描则决定仿真效率与收敛性。合理设置这些参数可显著提升S参数准确性,避免设计迭代。应用场景包括天线馈线、滤波器和微波互连。本文基于HFSS微带线仿真实践,系统讲解材料选择与参数优化全链路,帮助工程师快速复现可靠模型。

weixin_29192211的博客 82

java拦截器要怎么写_SpringMVC中的拦截器详解及代码示例

本文研究的主要是SpringMVC中的拦截器的介绍及实例代码,配置等内容,具体如下。Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法。1. springmvc拦截器的定义和配置1.1 springmvc拦截器的定义在springmvc中,定义拦...

weixin_35924166的博客 2485

蛋白质组学进阶指南 | (八)差异蛋白筛选与功能解析实战

本文是蛋白质组学差异蛋白筛选与功能解析的实战指南。详细讲解了如何利用R语言的limma包进行差异表达分析,结合FDR校正和差异倍数设定筛选关键蛋白,并通过火山图可视化结果。进一步介绍了使用clusterProfiler进行GO与KEGG功能富集分析,以及利用STRING数据库和Cytoscape构建蛋白互作网络以识别枢纽分子,最终串联分析形成可验证的生物学假说。

weixin_29208077的博客 745

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战

本文详细解析了富斯i6遥控器与STM32通过IBUS协议通信的实战指南,涵盖硬件准备、协议解析、驱动实现及常见问题解决。特别适合机器人及智能小车开发者,提供低成本、高可靠性的无线控制方案,助力快速实现多通道控制功能。

weixin_29193359的博客 441

Java三大器之拦截器(Interceptor)的实现原理及代码示例

前言:前面2篇博客,我们分析了Java中过滤器和监听器的实现原理,今天我们来看看拦截器。 1,拦截器的概念 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action 执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截 然后再之前或者之后加入某些操作。目前,我们需要掌握的主要是Spring的拦截器,Struts2的...

u013733643的博客 1万+

【TM1650】STM8S TM1650芯片控制程序

以下为.h文件: #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include "stm8s.h" #include "stm8s_gpio.h" #include "tim1.h" #include "usart2.h" #include <iostm8s103f3.h> #include <intrinsics....

cxw312864660的博客 1万+

JAVA三种拦截方式

最近面试有遇到拦截方式的场景,结合网上xdm的代码整理了下,分为以下三种:java原生过滤器Filter、springMVC拦截器、aop切面。

21届Java攻城狮&Python民兵 5264

成分数据的闭合效应对地球化学数据的影响及其解决方案

封闭效应 (Closure Effect),也称为常数和效应 (Constant Sum Effect),是地球化学数据分析中一个需要特别注意的统计现象。它的产生是由于我们通常使用成分数据 (Compositional Data)百分比 (%)百万分率 (ppm)由于这些数据表示的是各组分占总体的比例,它们的总和必然是一个常数 (例如 100% 或 1,000,000 ppm)。这意味着每个元素的含量不是独立的,而是与其他元素的含量相互制约。改变其中一个元素的含量必然会影响其他元素的相对比例。

qq_59349063的博客 1538

C++高级数据结构算法 | 二叉树的四种遍历算法详解(递归与非递归实现)

二叉树遍历方法 、前序遍历算法 、中序遍历算法 、后序遍历算法 、层序遍历算法

ZY-JIMMY 2567

java拦截器怎么实现

release ()方法的参数列表如下: 由于我们需要使用 release ()方法来创建一个新的类,所以我们还需要在构造函数中定义一个静态方法: set (),该方法调用时会创建一个新的对象。3.最后我们还需要创建两个类,其中一个是用来创建对象的,另一个是用来维护这个对象的属性和方法的。我们的类在初始化的时候会创建一个静态方法,并且这个静态方法会被调用,然后调用这个方法来获取对象的属性和方法,但是如果有其他的程序也需要获取这个对象的属性和方法,那么就不能使用这个静态方法,这时就需要使用其他的方法来实现。

花生日记 2962

ABAP CDS 和 HANA SQL 的关系

摘要: ABAP CDS与HANA SQL既有紧密联系又有本质区别。ABAP CDS作为语义数据建模框架,在SQL基础上扩展了业务语义层,通过注解(annotations)、关联关系(associations)等机制为数据附加业务含义,并支持权限控制、客户端处理等ABAP平台特性。虽然CDS实体最终会转换为HANA数据库对象执行,但它并非简单的SQL封装,而是构建了独立于数据库的语义模型。二者在数据库执行层深度融合,ABAP CDS通过代码下推技术将计算任务优化到HANA层完成。实际开发中应优先使用ABAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 863

JAVA拦截器的三种实现方式

【代码】JAVA拦截器的三种实现方式。

初夏0811的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java拦截器_Java拦截器实现

java拦截器实现功能类似于aop功能的实现,实现拦截部分方法,一般用于类似 登录进入A页面,未登录进入B页面实现方法有两种 实现Interceptor 接口 或者 继承HandlerInterceptorAdapter类,实现接口需要实现其中所有方法,继承抽象类则一般实现preHandle方法即可。首先配置拦截类package net.parim.spark.portal.adapter;im...

weixin_28698129的博客 1776

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

用 Java 实现拦截器 Interceptor 的拦截功能

  利用Java的反射技术 1,接口 public interface AInterface { void a(); } 2,实现类 public class AImp implements AInterface { @Override public void a() { System.out.println("aaaaaaaaaaa"...

RichardGeek的博客 2183

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java实现拦截器

<br />一、业务组件:分为业务接口和业务类/** <br />* Created by IntelliJ IDEA. <br />* User: leizhimin <br />* Date: 2008-3-20 23:32:06 <br />* Company: LavaSoft(http://lavasoft.blog.51cto.com/) <br />* 业务组件接口 <br />*/<br />publicinterface BusinessInterface { <br />    publ

whuyi的专栏 679

java实现的拦截器

拦截器在在流行的开源框架中很常见,依赖的技术就是Java的动态代理。   理解拦截器的核心原理对理解这些开源框架的体系结构至关重要。   下面以一个简单的模型的来说明拦截器的实现的一般方法。   模型分为以下模块:   业务组件:是被代理和被拦截的对象。   代理处理器:实现了InvocationHandler接口的一个对象   代理对象:Proxy对象。

lq273910809的专栏 375

java拦截器的原理_拦截器的实现原理

运行主类Main.javapublic class Main {public static void main(String[] args) {new ActionInterceptor().invoke() ;}}/********************************/拦截器核心ActionInterceptor.javaimport java.util.ArrayList;impo...

weixin_39877581的博客 299

Java的项目中如何去实现拦截器

Java 中的拦截器核心用于 拦截请求 / 方法调用,做预处理、后处理(如权限校验、日志记录、参数过滤),最常用的场景是 Spring MVC Web 请求拦截(拦截 Controller 接口),其次是 MyBatis 方法拦截(拦截 SQL 执行)。.addPathPatterns("/api/**") // 拦截所有 /api 开头的接口(如 /api/user、/api/order).excludePathPatterns("/api/login") // 放行登录接口(不拦截)

weixin_63462802的博客 629
上一篇: Java数字证书
下一篇: 谷歌是如何做代码审查的
programloverjack
博客等级 码龄17年 5粉丝 252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值