拦截器是一个类,这个类包含方法,用来解决DRY规则,即代码复用的问题。如果不调用拦截器,代码中需要显示通过代码调用目标方法,定义了拦截器,系统就会自动执行。大部分时候,拦截器方法都是通过代理的方式调用的。

例子:动态代理

Dog.java

  1: package cc.openhome;
  2: public interface Dog {
  3:   //方法的声明
  4:   public void info();
  5:   public void run();
  6: }
  7: 

DogImg.java

  1: package cc.openhome;
  2: public class DogImpl implements Dog {
  3:   //提供方法的实现
  4:   @Override
  5:   public void info() {
  6:     // TODO Auto-generated method stub
  7:     System.out.println("我是一个info猎狗");
  8:   }
  9:   @Override
 10:   public void run() {
 11:     // TODO Auto-generated method stub
 12:     System.out.println("我run奔跑迅速");
 13:   }
 14: }

    DogIntercepter.java系统拦截器

  1: package cc.openhome;
  2: public class DogIntercepter {
  3:   //第一个拦截器方法
  4:   public void method1(){
  5:     System.out.println("=====模拟通用方法1======");
  6:   }
  7:   //第二个拦截器方法
  8:   public void method2(){
  9:     System.out.println("=====模拟通用方法2======");
 10:   }
 11: }
 12: 

    ProxyHandler.java动态调用目标对象的方法

  1: package cc.openhome;
  2: import java.lang.reflect.InvocationHandler;
  3: import java.lang.reflect.Method;
  4: public class ProxyHandler implements InvocationHandler {
  5:   //需被代理的目标
  6:   private Object target;
  7:   //用于设置传入目标对象的方法
  8:   public void setTarget(Object o){
  9:     this.target=o;
 10:   }
 11:   public Object getTarget() {
 12:     return target;
 13:   }
 14:   //创建拦截器实例
 15:   DogIntercepter di = new DogIntercepter();
 16:   //执行代理的目标方法时,该invoke方法会被自动调用
 17:   @Override
 18:   public Object invoke(Object proxy, Method method, Object[] args)
 19:       throws Throwable {
 20:     // TODO Auto-generated method stub
 21:     Object result = null;
 22:     //如果被调用方法的方法名为info
 23:     if(method.getName().equals("info")){
 24:       di.method1();
 25:       result = method.invoke(target, args);
 26:       di.method2();
 27:     }else{
 28:       result = method.invoke(target, args);
 29:     }
 30:     return result;
 31:   }
 32: }
 33: 

    MyProxyFactory.java代理工厂,作用就是根据目标对象生成一个代理对象

  1: package cc.openhome;
  2: import java.lang.reflect.Proxy;
  3: public class MyProxyFactory {
  4:   /*
  5:    * 代理工厂的作用是根据目标对象生成一个代理对象
  6:    * */
  7:   public static Object getProxy(Object object){
  8:     //代理的处理类
  9:     ProxyHandler handler = new ProxyHandler();
 10:     //将该Dog实例托付给代理操作
 11:     handler.setTarget(object);
 12:     return Proxy.newProxyInstance(DogImpl.class.getClassLoader(), object.getClass().getInterfaces(), handler);
 13:   }
 14: }
 15: 

   TestDog.java主程序

  1: package cc.openhome;
  2: public class TestDog {
  3:   public static  void main(String[] args){
  4:     //创建一个Dog实例,该实例将作为被代理的对象
  5:     Dog targetObject = new DogImpl();
  6:     Dog dog=null;
  7:     //以目标对象创建代理
  8:     Object proxy = MyProxyFactory.getProxy(targetObject);
  9:     if(proxy instanceof Dog){
 10:       dog = (Dog)proxy;
 11:     }
 12:     //测试代理的方法
 13:     dog.info();
 14:     dog.run();
 15:   }
 16: }
 17: 

    运行结果

如果想要知道拦截器具体内容知识,参见Struts2拦截器介绍

Struts2的拦截器----Dog实例的更多相关文章

  1. Struts2自定义拦截器——完整实例代码

    比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...

  2. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  3. Struts2拦截器配置实例

    拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...

  4. 谈谈 Struts2 的拦截器

    套话 相信非常多人都用过 Struts2 了,当然,对 Struts2 的原理也都比較了解.之前在一个项目中就已经用到了,当初的理解也不过局限在应用的层面上,对于更深层次的原理.机制,了解的并非非常多 ...

  5. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  6. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  7. Struts2【拦截器】就是这么简单

    什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...

  8. JavaWeb框架_Struts2_(三)---->Struts2的拦截器

    2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...

  9. 通俗易懂之SpringMVC&Struts2前端拦截器详解

    直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...

随机推荐

  1. POJ 2240 Arbitrage Bellman_ford 判读是否存在正环

    和POJ1860差不多,就是用bellmanford判读是否存在正环,注意的是同种货币之间也可以交换,就是说:A货币换A货币汇率是2的情况也是存在的. #include<stdio.h> ...

  2. '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "AttentionController" nib but the view outlet was not set.'

    问题出现原因: 先创建控制器的.h与.m文件,后来创建了相应的xib文件,运行后出现这个问题. 解决办法:

  3. HDU 1815 Building roads

    二分答案 + 2-SAT验证 POJ 稳过,HDU C++ 超时,G++ 550ms左右AC #include<cstdio> #include<cstring> #inclu ...

  4. 进程间通信——FIFO(多个客户进程,一个服务进程)

    FIFO简介 FIFO就是Unix的一种复合POSIX标准的进程间通信机制.他又称为命名管道,跟管道的不同点是,每个FIFO都有一个路径名与之关联. FIFO虽然有路径名,但是他这中文件是在内核态(管 ...

  5. photosho 等距复制或旋转复制

    选区是不可以复制的,不过可以用这个方法:1.新建图层,任意绘制一个图形2.ctrl+j复制一层,ctrl+T 切换到变形工具,移动或变形该图形后enter.3.按Alt+Shift+ctrl+T.4. ...

  6. log4j配置日志系统

    1. lib里加入3个包 slf4j-api, slf4j-log4j12, log4j 2. 在src下 创建log4j.properties ### direct log messages to ...

  7. PAT 天梯赛 L2-004 这是二叉搜索树吗?

    递归判断+建树 题目链接:https://www.patest.cn/contests/gplt/L2-004 题解 二叉搜索树的特点就是其根节点的值是位于左右子树之间的,即大于左子树的所有值,但是小 ...

  8. (H5)FormData+AJAX+SpringMVC跨域异步上传文件

    最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页 ...

  9. <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

    Asp.net Mvc 未能加载类型“System.Web.Mvc.ViewPage 的解決方法 2010-11-30 17:31:51|  分类: .net mvc |举报 |字号 订阅   如果多 ...

  10. c#之从服务器下载压缩包,并解压

    项目的配置文件为了和服务器保持一致,每次打包时都从网上下载配置文件,由于下载的是zip压缩包,还需要解压,代码如下: using ICSharpCode.SharpZipLib.Zip; using ...