太晚了,有些东西没有补充,回头再补上。
先上Demo
1.要执行的方法
  1. package enhancerTest;
  2. /**
  3. * Created by LiuSuSu on 2017/3/26.
  4. */
  5. public class UserService {
  6. public void doxx(){
  7. System.out.println("do...");
  8. }
  9. }
2. 代理类
  1. package enhancerTest;
  2. import org.springframework.cglib.proxy.MethodInterceptor;
  3. import org.springframework.cglib.proxy.MethodProxy;
  4. import java.lang.reflect.Method;
  5. /**
  6. * Created by LiuSuSu on 2017/3/26.
  7. */
  8. public class CglibCallBackUserService implements MethodInterceptor {
  9. /**
  10. * cglib调用的
  11. *
  12. * @param o 调用对象
  13. * @param method 调用的方法
  14. * @param args 参数
  15. * @param methodProxy 代理的方法
  16. * @return
  17. * @throws Throwable
  18. */
  19. @Override
  20. public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
  21. System.out.println("before " + method.getName());
  22. //注意invoke代理的是自己,这是一个递归,死循环
  23. //Object obj= methodProxy.invoke(o, args);
  24. Object obj = methodProxy.invokeSuper(o, args);
  25. System.out.println("after " + method.getName());
  26. return obj;
  27. }
  28. }
3.测试方法
  1. package enhancerTest;
  2. import org.springframework.cglib.proxy.Enhancer;
  3. /**
  4. * Created by LiuSuSu on 2017/3/26.
  5. */
  6. public class EnhanceTest {
  7. public static void main(String[] args) {
  8. Enhancer enhancer = new Enhancer();
  9. enhancer.setSuperclass(UserService.class);
  10. enhancer.setCallback(new CglibCallBackUserService());
  11. UserService service = (UserService) enhancer.create();
  12. service.doxx();
  13. System.out.println("over");
  14. }
  15. }
4.运行结果
before doxx
do...
after doxx
over

灵活性上远远大于传统的代理模式。

Enhance基本例子的更多相关文章

  1. 朱晔和你聊Spring系列S1E10:强大且复杂的Spring Security(含OAuth2三角色+三模式完整例子)

    Spring Security功能多,组件抽象程度高,配置方式多样,导致了Spring Security强大且复杂的特性.Spring Security的学习成本几乎是Spring家族中最高的,Spr ...

  2. 源代码增强的一点说明(souce code enhance )

    souce code enhance 分为显式和隐式两种. 下面以显式创建为例子: 1.在ABAP编辑器中, 打开想要编辑的程序,切换到可编辑模式 2.在源代码中的指定位置右键,弹出菜单,选择 Enh ...

  3. SQLServer地址搜索性能优化例子

    这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...

  4. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  5. REGEX例子

    作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式).这个程序像下 ...

  6. CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子

    CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchai ...

  7. 简单例子了解View的事件分发

    什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...

  8. 简单的例子了解自定义ViewGroup(一)

    在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...

  9. kqueue例子

    网络服务器通常都使用epoll进行异步IO处理,而开发者通常使用mac,为了方便开发,我把自己的handy库移植到了mac平台上.移植过程中,网上居然没有搜到kqueue的使用例子,让我惊讶不已.为了 ...

随机推荐

  1. c++11并发机制

    传统意义上OS提供的并发机制包含进程和线程两个级别.考虑到实际复杂性,c++11仅提供了线程并发机制. c++11提供的线程并发机制主要位于四个头文件中:..... 线程并发机制包括线程管理.原子操作 ...

  2. jetty 代码启动

    jetty代码启动 jetty 版本为:jetty-distribution-8.1.16.v20140903 public class ServerStart extends Server { @T ...

  3. 基于jquery hover图片遮罩层滑动

    分享一款基于jquery hover图片遮罩层滑动.这是一款仿腾讯课堂的鼠标悬停经过图片遮罩透明层滑动效果.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div clas ...

  4. [emacs] org-mode的一些小技巧

    Table of Contents 1 快速输入 #+BEGIN_SRC … #+END_SRC 2 代码按语法高亮 3 导出成HTML时的一些问题和技巧 3.1 生成目录表 3.2 为每个分节的标题 ...

  5. [转]PowerDesigner表结构和字段大小写转换

    原文地址:https://blog.csdn.net/u010216641/article/details/48712503 ##PowerDesigner去除双引号## 平时经常用PowerDesi ...

  6. JQUERY双下拉框内容的左右移动

     教程源码:http://bbs.php100.com/read-htm-tid-74060.html用到的方法为:appendTo() 格式:$(content).appendTo(selector ...

  7. C语言 · 身份证排序

    算法提高 身份证排序   时间限制:1.0s   内存限制:256.0MB      问题描述 安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号 ...

  8. DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接 ...

  9. Flexbox的布局

    http://segmentfault.com/blog/gitcafe/1190000002490633 https://css-tricks.com/snippets/css/a-guide-to ...

  10. UIWebview交互之自己定义传值跳转

    UIWebview常常会用到和原生页面的跳转.有的可能还须要传值跳转.自己写了一个自己定义跳转的webview,能够跳转到指定控制器并传值,这须要和后台协商好.html中怎样传值跳转,即:html中的 ...