Struts2的拦截器----Dog实例

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

    拦截器是一个类,这个类包含方法,用来解决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: 

    运行结果

2016-12-05_9-59-43

 

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

当神已无能为力,那便是魔渡众生
目录
相关文章
|
小程序 Java 分布式数据库
分享66个Java源码,总有一款适合您
分享66个Java源码,总有一款适合您
507 0
分享66个Java源码,总有一款适合您
|
负载均衡 网络安全
|
22天前
|
人工智能 运维 专有云
持续领先!阿里云入选2025年Gartner®分布式混合基础设施魔力象限
近日,Gartner发布2025年《分布式混合基础设施魔力象限》报告,在混合云场景下,阿里云凭借飞天企业版(Apsara Stack)、边缘云ENS和云盒CloudBox产品组合能力,在“执行能力”和“愿景完整性”两大维度分别处于亚太厂商中最高最远的位置。
172 6
|
4月前
你为什么卸载了WPS?WPS 如何卸载干净?卸载不了WPS?看这里
本文介绍了如何彻底卸载电脑软件,包括WPS、Office 2016及Steam游戏等,分析了软件卸载不干净的原因,并推荐使用第三方工具如Geek进行深度清理,帮助用户解决残留文件、注册表项和服务项问题,确保系统运行更流畅。
973 1
|
11月前
|
SQL 弹性计算 安全
企业云资源端到端安全合规:最佳实践与工具应用
本次课程围绕企业合规的重要性、云上合规框架、阿里云提供的工具及新能力展开。首先,讲解了企业面临的合规挑战,如配置错误导致的数据泄露风险。其次,介绍了合规框架的来源和主动合规的重要性。接着,详细说明了如何通过资源中心、操作审计、管控策略和配置审计等工具实现云资源端到端的合规管理。最后,发布了阿里云在合规方面的最新能力,帮助企业更好地应对合规需求。
|
9月前
|
Web App开发 JSON API
携程网地方美食品列表数据接口(携程 API 系列)
携程网作为国内领先的在线旅游服务平台,整合了丰富的美食资源。通过其地方美食品列表数据接口(假设存在),开发者可获取各地特色美食信息,如名称、菜系、评分等,并按价格、热门程度筛选。接口返回 JSON 格式数据,支持地区和筛选参数设置,且有调用频率限制。示例代码展示了如何使用 Python 的 requests 库发送请求并处理响应,模拟查询北京地区的美食。实际接口需替换为真实 URL。
|
机器学习/深度学习 自动驾驶 算法
深度学习中的图像识别技术及其在自动驾驶中的应用
【10月更文挑战第4天】本文深入探讨了深度学习在图像识别领域的应用,并特别关注其在自动驾驶系统中的关键作用。文章首先介绍了深度学习的基本概念和工作原理,随后通过一个代码示例展示了如何利用深度学习进行图像分类。接着,文章详细讨论了图像识别技术在自动驾驶中的具体应用,包括物体检测、场景理解和决策制定等方面。最后,文章分析了当前自动驾驶技术面临的挑战和未来的发展趋势。
227 4
|
机器学习/深度学习 数据采集 人工智能
使用Python实现简单的机器学习分类器
【8月更文挑战第37天】本文将引导读者了解如何利用Python编程语言构建一个简单的机器学习分类器。我们将从基础概念出发,通过代码示例逐步深入,探索数据预处理、模型选择、训练和评估过程。文章旨在为初学者提供一条清晰的学习路径,帮助他们理解并实现基本的机器学习任务。
|
数据采集 运维 监控
ARMS自定义监控
【8月更文挑战第25天】
386 3
|
传感器 编解码 资源调度
聊一聊计算机视觉中的高斯分布
高斯分布,又称正态分布,是概率统计中常见的分布形式。在计算机视觉领域,高斯分布被广泛应用于图像噪声建模、高斯滤波、特征表示、背景建模及高斯核密度估计等方面,是许多图像处理算法的核心。通过高斯分布,可以有效处理噪声、平滑图像、提取特征及建模背景,提升算法性能。
2699 0