拦截器模式在很多场合会见到,本质上讲它不属于基础24种设计模式的一种,但从设计实现角度看,责任链模式可以很好得实现拦截器。比如web服务器的filter、structs2框架中的interceptor、flumn的interceptor等等。
很多时候,我们会过度迷恋设计模式,我以为,适合拦截器设计的场合如下:
1.各个拦截器彼此之间独立
拦截器彼此之间不应当有关联,即彼此无耦合。通常连接器(责任链上的节点)对某个对象的处理都是从自身视角看,只关心自己的处理逻辑。彼此独立就意味着,拦截器配置的先后顺序无关。
2.拦截器自身无状态
拦截器对对象的处理不应当关心这次处理的对象和上一个对象之间的联系,当然,如果一定有这样的需求,拦截器也可以做成有状态的,此时却加重了调用者的设计负担。拦截器之间的彼此独立特性和自身的无状态特性应当是相辅相成的
3.拦截器执行幂等
拦截器对某个对象拦截处理应当是幂等的,即多次执行和一次执行的效果相同。因此,即使配置同一个拦截器多次,也不会影响整个架构。事实上,一般的拦截器处理结果都会保存到map中,而map.put本身就是幂等的
为了设计模式而设计模式是愚蠢的事情;同样为了完美的模式而选择模式也是无谓的。
structs2的第一个拦截器在我看来是反模式的,但却很好得完成了任务
分享到:
相关推荐
在众多情况下,日志的管理是通过拦截器来完成的,不过通过STRUTS2的拦截器编码比较繁琐,在此通过spring的aop来处理,在贫血模式下将代码量降到最低,同时配置文件均可共用,从此,不用为日志管理浪费任何时间。
在Java Web开发中,过滤器(Filter)和拦截器(Interceptor)是两种常见的处理请求和响应的机制。它们主要用于在请求被实际处理之前或之后执行某些预定义的任务,如认证、授权、数据转换、日志记录等。在这个基于...
整个封装过程还体现了对代码的模块化和复用性思考,通过request.js文件封装和导出模块,使得其他页面或组件可以在不关注请求细节的情况下,直接使用封装好的API进行HTTP通信。 最后,该过程还演示了如何在微信小...
★锁定模式:锁定模式可防止您在会话中退出或修改阻止,以帮助打破最有害的习惯。每天都有成千上万的人依靠自由来写作,学习,烹饪,设计,建造,娱乐,思考,学习并找到专注于做真正重要的事情的重点。现在就开始!...
J2EE核心模式一书中涵盖了多种关键的J2EE设计模式,如拦截过滤器、前端控制器、视图助手等,这些模式对于处理J2EE中的常见问题至关重要。 ### J2EE平台概述 该章节提供了对J2EE平台的深入理解,包括其架构、服务、...
- **Controller**:Struts框架的系统核心控制器和业务逻辑控制器协同工作,拦截并处理HTTP请求。 - **Spring**:提供整体框架支持,促进组件解耦和模块化。 - **Hibernate**:作为ORM框架,简化数据库操作,实现...
1. 新增框架拦截器 2. 修改框架默认Module,Controller,Action逻辑,如果参数不存在则返回404错误页 3. 修改获取IP地址的函数BUG 4. 新增验证码增强类 5. ajax_return 添加json和xml的HTTP Content-type
3. **拦截器(Interceptor)**:拦截器是Struts2的重要特性,它可以插入到Action调用链中,实现预处理和后处理功能,如日志记录、权限检查、异常处理等。常见的拦截器有Params、Validation、I18n、Execute等。 4. *...
本文为《 JavaScripti计模式与开发实践》一书的学习与思考。 基础知识 设计模式 创建型模式:封装创建对象的变化 封装new构造函数 对象池 结构型模式:封装对象之间的组合关系 utils;统一兼容接口 代理拦截;缓存...
2. **解决方案**:通过对会话外观模式的重新思考,提出了几种不同的实现策略,包括: - **无状态会话Bean策略**:适用于简单的、无需维护长期状态的服务。 - **POJO策略**:使用普通的Java对象来实现业务逻辑,...
7. **装饰器模式**:动态地给一个对象添加一些额外的职责,可以用来扩展对象功能而不影响其结构。 8. **代理模式**:为其他对象提供一个代理以控制对这个对象的访问,常用于数据请求的拦截和处理。 9. **命令模式*...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
此外,Struts2还支持丰富的插件和拦截器,增强了功能和扩展性。 【Hibernate框架】 Hibernate是ORM(对象关系映射)框架,它简化了数据库操作,将Java对象与数据库表进行映射,从而避免了直接编写SQL语句。在体育...
- **拦截器(Interceptor)**:Struts2引入了拦截器机制,可以在Action执行前后添加自定义逻辑,如日志记录、权限验证等。 - ** strut2 动态方法调用**:允许通过URL直接调用Action的方法,增强了路由的灵活性。 -...
65_ChannelPipeline创建时机与高级拦截过滤器模式的运用 66_Netty常量池实现及ChannelOption与Attribute作用分析 67_Channel与ChannelHandler及ChannelHandlerContext之间的关系分析 68_Netty核心四大组件关系与构建...
63_Reactor模式与Netty组件对比及Acceptor组件的作用分析 64_Channel与ChannelPipeline关联关系及模式运用 65_ChannelPipeline创建时机与高级拦截过滤器模式的运用 66_Netty常量池实现及ChannelOption与Attribute...
这个项目可能是为了帮助学习者理解Struts2的核心概念、控制器、拦截器、动态方法调用、结果类型、国际化、异常处理等关键功能而创建的。 【描述】中提到,这些代码是个人学习过程的产物,可能包括了针对特定功能或...