Struts2的拦截器----Dog实例
拦截器是一个类,这个类包含方法,用来解决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: @Override5: public void info() {6: // TODO Auto-generated method stub7: System.out.println("我是一个info猎狗");8: }9: @Override10: public void run() {11: // TODO Auto-generated method stub12: 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: @Override18: public Object invoke(Object proxy, Method method, Object[] args)19: throws Throwable {20: // TODO Auto-generated method stub21: Object result = null;22: //如果被调用方法的方法名为info23: 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实例的更多相关文章
- Struts2自定义拦截器——完整实例代码
比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- Struts2拦截器配置实例
拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...
- 谈谈 Struts2 的拦截器
套话 相信非常多人都用过 Struts2 了,当然,对 Struts2 的原理也都比較了解.之前在一个项目中就已经用到了,当初的理解也不过局限在应用的层面上,对于更深层次的原理.机制,了解的并非非常多 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- Struts2【拦截器】就是这么简单
什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...
- JavaWeb框架_Struts2_(三)---->Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
- 通俗易懂之SpringMVC&Struts2前端拦截器详解
直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...
随机推荐
- 开发板S3C2440挂起NFS步骤
第一.安装.配置.启动FTP.SSH或NFS服务 参考韦东山的嵌入式linux应用开发完全手册 http://pan.baidu.com/s/1o79h3n0 第二.windows.linux以及开发 ...
- 需要注意的subList方法!和substring是不一样的!从源码解释他们的不同。
很多时候我们截取字符串用的是substring方法,很自然用着,但是对于列表的截取时很多时候就用得很少,但是其实他们是很不一样的,具体哪里不一样呢? package main; import java ...
- 关于js的几道经典题(作用域、原型链等)自己做的
1. function test() { var a = 1; setTimeout(function() { alert(a); a = 3; }, 1000); a = 2; setTimeout ...
- 【HighCharts系列教程】三、图表属性——chart
一.chart属性说明 Chart是HighCharts图表中主要属性,包括了图表区域的颜色.线条.高度.宽度.对齐.图表类型等诸多属性,也是HighCharts图表中必须配置的属性之一. 配置cha ...
- Windows上mxnet实战深度学习:Neural Net
前提: 假设已经在Windows上安装配置好mxnet和python语言包. 假设mxnet安装目录为D:\mxnet 假设已安装好wget 可以参考 这篇文章 打开Windows的命令提示符: 执行 ...
- vmware中的bridge、nat、host-only的区别
概述: VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模 ...
- 计算机学院大学生程序设计竞赛(2015’12) 1001 The Country List
#include<cstdio> #include<cstring> #include<cmath> #include<string> #include ...
- USACO Section 1.1 Greedy Gift Givers 解题报告
题目 问题描述 有若干个朋友,朋友之间可以选择互相赠送一些有价值的礼物.一个人可以选择将一部分钱分给若干个朋友,例如某人送给其他两个人钱,总共赠送3元,两个人平均分,原本应该是每人1.5元,但是只能取 ...
- The 2014 ACMICPC Asia Regional Beijing Online
[A]极角排序+树状数组 [B]计算几何,凸包(队友已出) [C]-_-///不懂 [D]数论,概率密度 [E]图的连通性+Floyed传递闭包+bitset [F]贪心 [G]签到题 [H]区间维护 ...
- [Shell]随机数
0-1之间的随机数# awk 'BEGIN{srand();printf "%.16f\n",rand()}' 0-20之间随机数# awk 'BEGIN{srand();sum= ...