spring得到所有Action类
1. 代理模式的作用
将主要业务与次要业务进行松耦合组装。
2. 代理模式的本质
监控行为特征
3. 案例
(1)喝果粒果汁
主要业务:喝果汁
次要业务:喝前摇一摇
(2)JDK代理模式实现
接口:定义所有需要被监听行为
接口实现类:农夫果粒,果粒橙
通知类:实现次要业务,当前被拦截的主要业务与次要业务如何绑定执行
代理对象
示例:
(1)创建接口
/*
*
* 只有需要被监控的行为才有资格
* 在这里声明
*
*/
public interface DrinkService {
public void drink();
}
(2)接口实现类
public class Huiyuan implements DrinkService {
@Override
public void drink() {
System.out.println("喝汇源果汁");
}
}
public class Guolicheng implements DrinkService {
@Override
public void drink() {
System.out.println("喝果粒橙");
}
}
(3)通知类
public class GuozhiInvocationHandler implements InvocationHandler {
private DrinkService target;
public GuozhiInvocationHandler(DrinkService target){
this.target = target;
}
// invoke方法:在被监控行为将要执行时,会被JVM拦截,被监控行为和行为实现方会被作为参数输送invoke
// 这个被拦截方法是如何与当前次要业务方法绑定实现
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object returnValue = null;
if("drink".equals(method.getName())){
yaoyiyao();
returnValue = method.invoke(target,args);
}
return returnValue;
}
private void yaoyiyao(){
System.out.println("喝前摇一摇");
}
}
(4)代理类
public class ProxyFactory {
public static DrinkService builder(Class clazz) throws IllegalAccessException, InstantiationException {
//1.创建被监控实例对象
DrinkService target = (DrinkService) clazz.newInstance();
//2.创建一个通知对象
InvocationHandler adviser = new GuozhiInvocationHandler(target);
//3.向JVM申请负责监控target对象指定行为的监控对象(代理对象)
/*
* loader:被监控对象隶属的类文件在内存中真实地址
* interfaces:被监控对象隶属的类文件实现接口
* h:监控对象发现小明要执行被监控行为,应该有哪一个通知对象进行辅助
*/
DrinkService $proxy = (DrinkService) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),adviser);
return $proxy;
}
}
测试类:
public class TestDemo {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
DrinkService huiyuan = ProxyFactory.builder(Huiyuan.class);
huiyuan.drink();
DrinkService guolicheng = ProxyFactory.builder(Guolicheng.class);
guolicheng.drink();
}
}
测试结果:
喝前摇一摇
喝汇源果汁
喝前摇一摇
喝果粒橙
spring得到所有Action类的更多相关文章
- 第五课 Struts的控制器【续】Action类的execute()方法
1.Action类的execute()方法: public ActionForward execute(ActionMapping mapping, ...
- fielderror里的fieldName代表的是jsp里的fieldName还是Action类的成员变量?(待解答)
1.值栈的Action对象中会有一个fielderror属性,代表着字段错误. fielderror是Map<String,List<String>>类型 例如下面的值栈里可看 ...
- Struts2中的Action类(解耦方式,耦合方式)
一.解耦方式 特点:对web资源进行了封装,便于单元测试. 实现:ActionContext和接口方式 1.ActionContext 特点:Action执行的上下文对象.保存了执行Action所需要 ...
- Action类中获取request等对象的方法
struts2中的action类中,SevletActionContext可以获取
- Action类为何要继承ActionSupport
Action类为何要继承ActionSupport 理论上Struts 2.0的Action无须实现任何接口或继承任何类型,但是,我们为了方便实现Action,大多数情况下都会继承com.open ...
- Action类为何要 extends ActionSupport
我做的时候,我的action是继承ActionSupport的 Struts 2的Action无须实现任何接口或继承任何类型,普通的POJO类就可以用做Action类,但是,我们为了方便实现Actio ...
- Spring 的优秀工具类盘点
文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...
- 实现Action类
实现Action类 1.Action类的作用: (1)封装HTTP的请求参数: (2)处理用户请求: (3)封装处理结果. 2.Action类是什么,在Action类中应该包含什么: Action类就 ...
- 关于JFace中的右键菜单Action类,ActgionGroup类,MenuManager类
Action类,ActionGroup类,MenuManager类介绍 SWT中菜单是Menu类,在前面章节中已经介绍过Menu类的使用. 菜单项用MeauItem类来实现.但是在实际开发中,同一种功 ...
随机推荐
- Jenkins进阶-Slave 节点的配置(11)
Jenkins的主节点无法满足当前的发布需求,所以我们需要增加一个从节点,我们是本着节约的模式,所以主从节点均需要有任务来进行构建: 1.系统管理->管理节点: 2.添加从节点,管理节点-> ...
- Hibernate更新删除数据后,再查询数据依然存在的解决办法
删除数据后,重新查询了数据库,DB中记录已经删除了,但是数据依然能查询到,网上都说是Hibernate的缓冲问题. 我对session进行了clear,flush,并且在事务和查询中都对session ...
- pyhanlp文本分类与情感分析
语料库 本文语料库特指文本分类语料库,对应IDataSet接口.而文本分类语料库包含两个概念:文档和类目.一个文档只属于一个类目,一个类目可能含有多个文档.比如搜狗文本分类语料库迷你版.zip,下载前 ...
- mysql二进制日志详解
一.什么是二进制日志 二进制日志主要记录mysql数据库的变化,二进制日志包含所有更新了数据或者潜在更新了数据(如没有匹配到任何行的delete语句),语句以时间的形式保存,描述了数据的更改.二进制日 ...
- 一次修改mysql字段类型引发的技术探究
说来,mysql数据库是我们项目中用的比较多的库,ORM工具喜欢采用细粒度的MyBatis.这里面就这么引出了两者之间的故事! 首先,说改字段吧,将一个表中的varchar字段改为enum字段.如下: ...
- [转]bigbluebutton中文社区 / 开放API / bbb API
bigbluebutton中文社区 / 开放API / bbb API 创建会议 这个接口可以重复调用多次,而不会有副作用.这带来的好处就是能简化应用程序加会的流程,无论什么用户想要加会,都可以先创建 ...
- [转]jsPlumb插件做一个模仿viso的可拖拉流程图
原贴:https://www.cnblogs.com/sggx/p/3836432.html 前言 这是我第一次写博客,心情还是有点小小的激动!这次主要分享的是用jsPlumb,做一个可以给用户自定义 ...
- Web API 令牌(秘钥是双方约定的,并不在网络连接上传输)
http://blog.csdn.net/qq289523052/article/details/47750021 秘钥是双方约定的,并不在网络连接上传输 Web API数据传输加密 2015-08- ...
- pytest.7.常见套路
From: http://www.testclass.net/pytest/common_useage/ 在使用pytest的时候,下面这些问题我们可能会经常遇到,这里给出官方的解决方案,按照套路来执 ...
- C++进阶--代码复用 继承vs组合
//############################################################################ /* * 代码复用: 继承 vs 组合 * ...