一:委托者

 package com.yeepay.porxy.cglib.test;

 import java.util.HashMap;
import java.util.Map; /**
* 目标类,(委托类)
* @author shangxiaofei
*
*/
public class PaymentServer { public Map<String, String> payMoney(String name,Integer money){
System.out.println("paymentServer.payMoney()付钱=========>名字【"+name+"】,money=【"+money+"】");
Map<String, String> map=new HashMap<String, String>();
map.put("result", "已经完成付钱");
return map;
}
}

二:增强者(代理类)

 package com.yeepay.porxy.cglib.test;

 import java.lang.reflect.Method;

 import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
* 增强类
* @author shangxiaofei
*
*/
public class PoxyForService implements MethodInterceptor{ @Override
public Object intercept(Object arg0, Method arg1, Object[] arg2,MethodProxy arg3) throws Throwable {
// 增强功能的代码
System.out.println("PoxyForService.intercept(方法执行前执行========>向统计发送消息)");
if(arg2!=null&&arg2.length>0){
for(int i=0;i<arg2.length;i++){
System.out.println("PoxyForService.intercept()发送的参数内容====>"+arg2[i]);
}
} //执行方法内容
Object object=arg3.invokeSuper(arg0, arg2); System.out.println("PoxyForService.intercept(方法执行后执行=======>计算时间)");
return object;
} }

三:创造代理的工厂类

 package com.yeepay.porxy.cglib.test;

 import net.sf.cglib.proxy.Enhancer;

 /**
* 代理实现工厂类
* @author shangxiaofei
*
*/
public class PoxyFactory {
public static PaymentServer getPaymentServer(){
// Cglib 核心类,生成代理对象
Enhancer enhancer= new Enhancer();
// 为核心类对象中放入需要代理的委托类的类对象
enhancer.setSuperclass(PaymentServer.class);
// 为核心类对象中放入增强功能的类对象
enhancer.setCallback(new PoxyForService());
// 从核心类对象中获取委托类的代理对象
Object object=enhancer.create(); return (PaymentServer) object;
}
}

四:测试类

 package com.yeepay.porxy.cglib.test;

 import java.util.Map;
/**
* 测试类
* @author shangxiaofei
*
*/
public class TestController { private PaymentServer paymentServer=PoxyFactory.getPaymentServer(); public void payment(){
System.out.println("TestController.payment()开始");
Map<String, String> map=paymentServer.payMoney("怪物雷克", 100);
System.out.println("TestController.payment()结束===>"+map.get("result"));
} /**
* TestController.payment()开始
* PoxyForService.intercept(方法执行前执行========>向统计发送消息)
* PoxyForService.intercept()发送的参数内容====>怪物雷克
* PoxyForService.intercept()发送的参数内容====>100
* paymentServer.payMoney()付钱=========>名字【怪物雷克】,money=【100】
* PoxyForService.intercept(方法执行后执行=======>计算时间)
* TestController.payment()结束===>已经完成付钱
* @param args
*/
public static void main(String[] args) {
TestController testController=new TestController();
testController.payment();
}
}

最新文章

  1. eclipse不能新建server
  2. 【Gson】2.2.4 StackOverflowError 异常
  3. sn 密钥注册
  4. Shell中的变量
  5. canvas在手机qq浏览器显示错乱
  6. STL删除vector或list的方法及注意的问题
  7. struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复
  8. 读取excel数据 到 datagrid 出现 找不到可安装的ISAM
  9. 洛谷 [P3258] 松鼠的新家
  10. Linux安装任意版本的dotnet环境
  11. sql0001
  12. 初识docker
  13. java学习笔记-集合set
  14. 记不住的Android活动的生命周期
  15. flask 单个页面多个表单(单视图处理、多视图处理)
  16. PHP采集利器:Snoopy 试用心得
  17. apscheduler -定时任务
  18. Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js
  19. C# 通过Exchange server 发送邮件
  20. Windbg 脚本命令简介 二, Windbg command

热门文章

  1. Thread IsBcakgroud
  2. SharePoint表单和工作流 - Nintex篇(二)
  3. lightoj1027
  4. Note_Master-Detail Application(iOS template)_01_YJYAppDelegate.h
  5. 保存现场数据和状态:onSaveInstanceState\onRestoreInstanceState\onCreate()
  6. 谈谈 Mifare Classic 破解
  7. javaweb-dbutils
  8. Python 字符串处理大全.
  9. Windows 2003 AD升级Windows 2008
  10. Magento模板Paypal付款不成功返回清空购物车产品【解决方案】