太晚了,有些东西没有补充,回头再补上。
先上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. csv和excel互转

    Python csv转换为excel学习笔记: openpyxl模块需要安装pip install openpyxl import openpyxl import csv '''读取csv文件写入ex ...

  2. java 获取 path

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

  3. phalcon无法更新分区字段解决办法

    表里面有个分区字段,更新后,保存成功,结果实际上数据库没有更新. 后来使用原生sql,解决了这个问题. 获取di中的数据库连接,直接执行sql语句即可,下面的db为注册的数据库服务名 $db = $t ...

  4. EF中的1:0或1:1关系以及1:n关系

    先给出1:0关系 User表包括用户名和密码 public class User { public int ID { get; set; } public string UserName { get; ...

  5. 解决Eclipse异常关闭后重启报 org.eclipse.swt.SWTException: Invalid thread access 的问题

    . . . . . 很久没有写博客了,最近实在是太忙,一直想写点干货,但是一直没静下心来学习. 今天又在加班忙碌之中,结果谁知道越忙碌越出问题.先是 weblogic 没有正常启动,凭经验第一反应就是 ...

  6. JS获取电脑或手机屏幕的分辨率

    s = " 屏幕分辨率的高:"+ window.screen.height+"\n"; s += " 屏幕分辨率的宽:"+ window.s ...

  7. centosmini7安装GNOME

    1.在命令行下输入下面的命令来安装 Gnome 包 #:$sudo  yum groupinstall "GNOME Desktop" "Graphical Admini ...

  8. Beans

    PHP之所以被人称为"世界上最好的语言",很大程度上是因为学会语法后就可以直接运用其开发Web应用了吧,而Java基本上不可能.在Java的语言特性的背后,还拖着由Sun公司和社区 ...

  9. .Net中的内存分配问题

    最近在测试的时候,要求测试内存不足的情况.我不想去开很多的程序来占用内存,那样太麻烦了,也不太精确.于是就写一个小程序来占用内存,想法很简单,就是声明一个Byte数组在占用内存,没想到这么简单的想法却 ...

  10. 安全运维之:网络实时流量监测工具iftop

    网络管理是基础运维中一个很重要的工作,在看似平静的网络运行中,其实暗流汹涌,要保证业务系统稳定运行,网络运维者必须要了解网络的流量状态.各个网段的使用情形,带宽的利用率.网络是否存在瓶颈等,同时,当网 ...