需求: 对原有系统中的方法进行'拦截',在方法执行的前后添加新的处理逻辑. 分析: 不是办法的办法就是,对原有的每个方法进行修改,添加上新的逻辑:如果需要拦截的方法比较少,选择此方法到是会节省成本.但是面对成百上千的方法怎么办?此时需要用到动态代理来实现. 场景: 例如:对原有的系统添加日志记录.添加性能分析等等... 举例: 如下,需要对Sleep对象的sleep方法进行"拦截",并在此方法的执行前后添加新的逻辑.想知道'睡觉前干了什么?睡觉后干了什么?' interface Sle…
http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三) 插件开发完成后,就需要注册.调试.部署了. 在注册之前,需要着重指出的是,必须对插件程序集进行签名,具体步骤是,在Visual Studio中,右键点击项目名称,快捷菜单中选择“属性”,在项目属性对话框中,点击“签名”页签, 勾选“为程序集签名”,在“选择强名称密钥文件”下拉框中,选择…
http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四) 上面几篇文章介绍了Microsoft Dynamics CRM 2011中如何进行插件开发,本文将介绍插件的调试. 调试的基本步骤是 1. 注册.部署插件,这部分内容在上一篇Blog中已经介绍,不再赘述: 2. 将插件的pdb文件拷贝到CRM安装目录下的“Server\Bin\Asse…
http://www.cnblogs.com/StoneGarden/archive/2012/02/02/2336147.html MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一) 在MS CRM 2011的自定义和开发(8)——扩展框架以及扩展点介绍中介绍了扩展点,在MS CRM 2011的自定义开发(10)的几篇文章中介绍了Microsof Dynamics CRM 2011中的发现服务DiscoveryService以及组织服务OrganizationSer…
http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二) 上一篇文章<MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)>,介绍了Microsoft Dynamics CRM 2011中插件plugin的基本概念,事件处理子系统的概念,本篇文章将介绍插件的开发的方法. 可以使用与.Net Framework 4.…
一.背景最近在工作之余,把开mybatis的源码看了下,决定自己手写个简单版的.实现核心的功能即可.写完之后,执行了一下,正巧在mybatis对Mapper接口的动态代理这个核心代码这边发现一个问题.正好再回头看了下jdk的动态代理发现问题所在. 二.问题问题所在,当我用SqlSession.getMapper() 方法来获取Mapper的代理类的时候,发现这个代理对象所展示的toString()是个null.如下图 而debug了一下mybatis的源码发,发现是有值,并且的确是new 的Ma…
JDK的动态代理深入解析(Proxy,InvocationHandler)(转) 一.什么是动态代理 动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象.客户不知道它是与代理打交道还是与实际对象打交道. 目的:主要用来做方法的增强,让你可以在不修改源码(不用改变这个方法的签名,原来调用这个方法的类依然能正常工作)的情况下,增强一些方法…
简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理的理解.我这个特别不爱看书的人都看半个多月了,希望我一个月真能养成个戒不掉的习惯~ 第八章 插件 在前一篇介绍了四个对象,是SqlSession执行过程中通过他们来完成数据库操作和结果返回的.(Executor.StatementHandler.ParameterHandler.ResultSetH…
Mybatis开源Plugin中最熟知的pagehelper,重点made in China 很多人开始用pagehelper时候,肯定很纳闷,以mysql为例,明明没有加limit语句,为什么打印出来的sql中有了limit语句了,这是怎么回事???插件在什么地方给sql加上了limit, 它为什么又能修改写好的sql,接下来尝试走进pagehelper @Intercepts( { @Signature(type = Executor.class, method = "query"…
5.3 Mapper动态代理方法(程序员只需要写mapper接口(相当于dao接口)) 5.3.1 实现原理(mapper代理开发规范) 程序员还需要编写mapper.xml映射文件 程序员编写mapper接口(相当于Dao接口)需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象. Mapper接口开发需要遵循以下规范: 1.在mapper.xml中namespace等于mapper接口地址 2.mapper.java接口中的方法名和mapper.xml中statem…