`
YOUNG918
  • 浏览: 189466 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts 2 拦截器底层实现原理 学习笔记

阅读更多

拦截器:
1、首先要有一个目标对象,要拦截谁
2、拦截对象,拦截器本身只是一个普通的类
3、对目标对象所生成的一个代理对象,真正去执行的是代理对象,代理对象也是有若干个方法
由系统动态产生出来的,并不是我们去写出来的,代理对象的方法与目标对象的方法很类似,但是
代理对象的方法是综合了拦截器的方法和跟你的系统的目标对象的方法,将其综合起来,就形成了代
理对象的方法,也就是说代理方法是拦截器方法与目标对象方法的一个结合体

 

示例:
新增一个类Target.java  就是我们的目标对象,在使用目标对象之前要有一个接口,要求我们向对接口
编程,即先生成一个接口TargetInterface,并生成一个方法,此接口是一个普通的接口;Target类实现
TargetInterface接口,在此Target就是目标对象,我们要拦截它Target
目标有了,现在就是要写个拦截器对象:Interceptor.java  在拦截器里面我们定义两个方法:before()、
after();其拦截器跟我们平时看到的类没有什么太大的区别,之所以叫拦截器是其行为而言的;
java对象的动态代理是要用到反射;生成一个处理器类MyHandler实现反射接口InvocationHandler
其作用是将要处理的对象注入到这个处理器类里面来,动态的来调用。
在MyHandler中方法invoke()方法是真正去调用的方法。

再生成一个代理类MyProxy作用是产生一个代理,方法以getProxy()  得到一个代理,在此要用到
Proxy类,通过newProxyInstance,new一个代理出来;

 

理清的关系:
Target是目标对象,是目标,代理谁
Interceptor是拦截器,将方法动态的插入到目标对象Target方法之前或是之后去执行
在些Target与Interceptor互相不知道,Target不知道被谁插入,Interceptor也不知道插入到哪里。
因此在这声明一个MyHandler处理器,真正去调用目标对象方法,调用目标对象方法之前,执行拦截器的before

(),调用目标对象方法之后执行拦截器的after();
还有一个最重要的代理对象MyProxy,有一个getProxy()方法,传过来目标对象,在此将目标对象set到处理器里

面去myHandler.setObject(object);然后返回一个代理实例,通过代理实例来调用目标对象的方法,目标对象方

法执行之后就会去调用拦截器,则相当于拦截器对其拦截了。


总结拦截器:
角色:
1、被拦截的对象或目标,目标对象的方法被拦截
2、拦截器本身,普通的class类,行为上来说起到了拦截别人的作用
3、代理,通过代理生成对目标对象的一个代理,执行的不是目标对象,而是代理,在代理中已经插入了拦截器

,这样的作用是降低偶合
目标对象与拦截器本身是互不关联的,低偶合,通过myHandler/myporxy来偶合,在struts2中是通过xml配置文件

来偶合的.代码程次是不偶合的.

 

拦截器底层实现就是动态代理实现的。

分享到:
评论

相关推荐

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    传智播客struts2全程学习笔记

    ### 传智播客Struts2全程学习笔记 #### Struts2的优点 1. **无侵入式设计**:与Struts1相比,Struts2的设计更为先进,它不依赖于Servlet API或Struts API,这使得Struts2更加灵活且易于集成到其他环境中。在代码...

    struts2学习笔记二

    在本篇学习笔记中,我们将重点讨论Struts2框架中的Action和拦截器(Interceptor)如何处理请求参数。 首先,Struts2的核心是拦截器机制,它允许我们在Action执行前后插入自定义的处理逻辑。在`struts-default.xml`...

    自己总结的struts2学习笔记(转)

    Struts2提供了非常强大的文件上传和下载功能,通过配置文件和拦截器,可以很容易地实现文件的上传和下载。 ##### 2. 表单校验 Struts2内置了一套表单校验机制,可以对用户的输入进行验证,避免非法数据的提交。 #...

    struts2学习笔记

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架概览 **起源与发展:** Struts2是WebWork框架的后续版本,融合了Struts1和WebWork的优点,形成了一种更为先进和灵活的MVC框架。相较于Struts1,Struts2在设计...

    struts2学习笔记一

    总的来说,Struts2通过提供一套完整的解决方案,降低了JavaWeb开发的复杂度,提高了开发效率,使得开发者能够更加专注于业务逻辑的实现,而不是繁琐的底层细节。尽管现在有许多其他MVC框架,如SpringMVC,但Struts2...

    struts2笔记和代码

    总的来说,"struts2笔记和代码"涵盖了Struts2框架的基本原理、配置、拦截器、Action实现、视图展现以及实践应用等多个方面,对于学习和掌握Struts2具有很高的价值。通过深入研究这些笔记和代码,开发者不仅可以理解...

    struts2.1.8学习笔记

    3. **拦截器(Interceptors)**:拦截器是Struts2的一个重要特性,它们在Action执行前后进行拦截,可以实现事务管理、日志记录、权限验证等功能。在Struts2.1.8中,开发者可以通过配置文件添加自定义拦截器或者使用...

    struts2.0学习笔记

    本篇学习笔记将深入探讨Struts2.0的核心概念和配置,帮助你理解和掌握这个框架。 **一、Struts2的作用** Struts2的主要目标是提供一种结构化的开发方式,它整合了请求处理、视图展示和业务逻辑的交互。通过使用...

    Struts2文档笔记

    - **拦截器**:Struts2引入了拦截器机制,允许开发者自定义拦截器来实现一些通用功能,如日志、权限检查等,这是Struts1所不具备的。 - **结果映射**:Struts2使用更灵活的结果映射,可以关联Action与视图,支持...

    struts2笔记html版本

    3. **Interceptor(拦截器)**:拦截器是Struts2的一个强大特性,可以实现AOP(面向切面编程)的功能,如日志记录、事务管理、权限验证等。开发者可以通过自定义拦截器来扩展框架功能。 4. **Value Stack(值栈)**...

    struts and hibernate学习笔记

    Action通过ActionMapping将请求与特定的业务逻辑关联起来,并且可以利用Interceptor拦截器进行预处理或后处理。此外,Struts2支持多种视图技术,如JSP、FreeMarker等,允许开发者灵活地选择视图渲染方式。 ...

    struts2笔记1

    在struts.xml中,你可以定义Action类、结果类型、拦截器栈等,这些都是Struts2工作的重要组成部分。例如,Action定义了请求如何映射到特定的Java类方法,结果类型决定了请求处理后的页面跳转,拦截器则可以在请求...

    全面struts2笔记

    此外,Struts2 的配置文件组织清晰,支持自定义拦截器和结果类型,使得整个框架更加适应企业级开发的需求。 在 Struts2 中,一个应用程序通常只有一个或少量的Servlet,通常是Filter,用于处理所有请求。Action 类...

    SSH整合学习笔记之struts2+spring+hibernate+c3p0源码

    首先,Spring需要配置Struts2的拦截器栈,以控制请求的处理流程。接着,Spring会管理Hibernate SessionFactory,为每个请求提供新的Session实例,以避免线程安全问题。同时,C3P0的配置包括设置初始连接数、最大连接...

    STRUTS经典笔记

    在实际开发中,还会涉及到Action类的编写、JSP页面的设计、结果类型(Result Types)的设置以及各种拦截器的运用,这些都是Struts 2.0笔记中的重要内容。 总结来说,Struts 2.0是为了解决Struts 1.x的问题而诞生的...

    struts2权威人士精心整理笔记

    4. 在`web.xml`中配置Struts2的核心过滤器`StrutsPrepareAndExecuteFilter`,该过滤器负责拦截所有非action或空的请求,确保只有符合规则的请求才能进入Struts2的处理流程。 5. 创建名为`struts.xml`的配置文件,...

    张龙S2SH学习笔记(经典)

    【张龙S2SH学习笔记(经典)】是基于圣思园张龙的视频教程整理出的学习资料,主要涵盖了Struts2、Spring和Hibernate这三大框架的整合使用,也就是我们常说的SSH(Spring、Struts2、Hibernate)框架集成。SSH框架在...

    struts2學習筆記

    【Struts2学习笔记】 Struts2是一款强大的Java EE应用程序框架,主要用于构建MVC(Model-View-Controller)架构的Web应用。它提供了一种结构化的控制层,使得开发人员可以更加专注于业务逻辑,而非底层的HTTP请求...

Global site tag (gtag.js) - Google Analytics