谈谈 Struts2 的拦截器
套话
理解
意义
实现原理
的方法。当中系统对于拦截器的调用,是通过ActionInvocation来实现的。
代码演示
Dog 接口
<span style="font-family:Microsoft YaHei;">public interface Dog {
// info 方法声明
public void info();
// run 方法声明
public void run();
}</span>
Dog 实现
<span style="font-family:Microsoft YaHei;">public class DogImpl implements Dog {
@Override
public void info() {
System.out.println("我是一仅仅小小狗");
} @Override
public void run() {
System.out.println("我奔跑迅速");
}
}</span>
拦截器类
<span style="font-family:Microsoft YaHei;">public class DogIntercepter {
// 第一个拦截器方法
public void method1() {
System.out.println("********** 通用模拟方法一 *********");
} // 第二个拦截器方法
public void method2() {
System.out.println("********** 通用模拟方法二 *********");
}
}</span>
ProxyHandler 类
<span style="font-family:Microsoft YaHei;">public class ProxyHandler implements InvocationHandler {
// 需被代理的目标对象
private Object target;
// 创建拦截器实例
DogIntercepter di = new DogIntercepter();
// 运行代理的目标方法时,该invoke方法会被自己主动调用
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
// 假设被调用方法的方法名为info
if ("info".equals(method.getName())) {
// 调用拦截器方法 1
di.method1();
result = method.invoke(target, args);
// 调用拦截器方法 2
di.method2();
} else {
result = method.invoke(target, args);
}
return result;
} // 用于设置传入目标对象的方法
public void setTarget(Object target) {
this.target = target;
}
}</span>
代理工厂类
主程序
<span style="font-family:Microsoft YaHei;">public class TestDog {
/**
* @param args
*/
public static void main(String[] args) {
// 创建一个Dog实例,该实例将被作为代理的目标对象
Dog targetObject = new DogImpl();
Dog dog = null;
// 以目标对象创建代理
Object proxy = MyProxyFactory.getProxy(targetObject);
if (proxy instanceof Dog) {
dog = (Dog) proxy;
}
// 測试代理的方法
dog.info();
dog.run();
}
}</span>
效果图
结束语
的拦截器 就是基于 AOP 的思想实现的,仅仅只是,那会的 AOP 还没有提出比較明白的概念罢了。也能够说,拦截器就是 AOP 实现的前身。当然,兴许的 AOP 功能更强大一些。
谈谈 Struts2 的拦截器的更多相关文章
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- Struts2自定义拦截器Interceptor以及拦截器登录实例
1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...
- struts2之拦截器
1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...
- Struts2【拦截器】就是这么简单
什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Str ...
- 【struts2】拦截器基础
1)拦截器是什么? 拦截器(Interceptor)是Struts2最强大的特性之一,它是一种可以让你在Action执行之前和Result执行之后进行一些功能处理的机制.来回顾一下官方给出的Strut ...
- JavaWeb框架_Struts2_(三)---->Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
- (转)Struts2的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/68648101 Struts2的拦截器 拦截器的概述 拦截器,在AOP(Aspect-Orien ...
随机推荐
- sass03 变量、样式导入
demo1.scss @import "css.css"; //导入css文件 @import "http://ss/xx"; //导入css文件 @impor ...
- hdu-2871
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- [Codeforces 757E] Bash Plays with Functions (数论)
题目链接: http://codeforces.com/contest/757/problem/E?csrf_token=f6c272cce871728ac1c239c34006ae90 题目: 题解 ...
- 3.c语言结构体成员内存对齐详解
一.关键一点 最关键的一点:结构体在内存中是一个矩形,而不是一个不规则形状 二.编程实战 #include <stdlib.h> #include <stdio.h> stru ...
- zookeeper伪分布安装配置
1.下载路径为:http://mirrors.cnnic.cn/apache/zookeeper/stable/ 2.安装: 第一步 解压zookeeper压缩包: 进入 zookeeper安装目录 ...
- 最简单的DES加密算法实现
Base64.java package com.mstf.des; import java.io.UnsupportedEncodingException; /** * base64编码/解码 * @ ...
- ACM训练联盟周赛(第三场)
A.Teemo's bad day Today is a bad day. Teemo is scolded badly by his teacher because he didn't do his ...
- Bomb HDU - 3555 数位dp
Code: #include<cstdio> #include<algorithm> #include<cstring> #include<string> ...
- git rebase 的使用 (用于撤销某次commit)
Q: I wrote the wrong thing in a commit message. Alternatively, I've forgotten to include some files. ...
- windows用xstart远程连接linux图形用户界面
转载:https://blog.csdn.net/yabingshi_tech/article/details/51839379 双击xstart 输入:/usr/bin/xterm -ls -dis ...