cglib动态代理[基于类操作的动态代理实现]
来源:互联网 发布:mac的桌面壁纸 编辑:程序博客网 时间:2024/05/16 06:21
class Message{ public void send(){ System.out.println("发送一条消息"); }}class MessageProxy implements MethodInterceptor{//定义一个拦截器 private Object target;//无论什么代理都必须绑定真实业务对象 public MessageProxy(Object target){ this.target = target; } @Override public Object intercept(Object proxy, Method method, Object[] args, MethodProxy mproxy) throws Throwable { this.parpre(); //使用真实业务对象通过反射调用对应方法 Object ret = method.invoke(target, args); this.over(); return ret; } public void parpre(){ System.out.println("打开电脑"); } public void over(){ System.out.println("关闭电脑"); }}public class CglibTest { public static void main(String[] args) { //Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); //JDK动态代理使用Proxy.newProxyInstance将真实业务对象和接口与代理对象绑定在一起 //cglib这边怎么粘合它们那? //我们要使用Enhancer粘合它们,做到你中有我,我中有你 Enhancer enhancer = new Enhancer(); //绑定父类[相当于JDK代理绑定接口] enhancer.setSuperclass(Message.class);//将真实业务对象的父类作为描述对象,相当JDK动态代理的接口描述,我们这里没有设置父类,直接使用本类即可 //绑定代理对象 Message mg = new Message(); enhancer.setCallback(new MessageProxy(mg)); //以上就动态配置好了类与代理对象之间的操作关系 //获取Message对象(已经绑定完成) Message msg = (Message) enhancer.create(); //被绑定后的真实业务对象调用send方法触发拦截器调用动态代理的intercept方法 //将真实业务的send方法对象保存起来,等待调用 //这样方便我们在intercept方法中调用此方法的时候可以随心所欲的增加一些额外的公共逻辑,使得开发更简便,代码更整洁,这就是代理模式的好处 msg.send(); }}运行结果:打开电脑发送一条消息关闭电脑
真实业务对象
绑定之后的真实业务对象
阅读全文
0 0
- cglib动态代理[基于类操作的动态代理实现]
- 基于cglib的动态代理
- CGLIB 动态代理的实现
- CGLIB实现动态代理
- CGLIB实现动态代理
- cglib实现动态代理
- CGLib实现动态代理
- cglib 实现动态代理
- cglib动态代理实现
- JDK动态动态代理和cglib动态代理的实现
- 基于cglib实现的动态代理原理与源码解析
- 基于jdk和cglib实现的动态代理
- cglib的动态代理
- Cglib的动态代理
- java 基于cglib动态代理
- Java 动态代理的理解与Cglib动态代理实现
- AOP的底层实现--JDK动态代理,CGLIB动态代理
- 基于Spring AOP的JDK动态代理和CGLIB代理
- Scrollview嵌套listVIew冲突问题的解决
- 005_LeetCode_5 Longest Palindromic Substring 题解
- day08-WorkAndStudy
- Python之缩进错误
- Java消息中间件学习笔记七 -- Spring中使用JMS
- cglib动态代理[基于类操作的动态代理实现]
- 数据结构-C语言 栈的简单应用——括号匹配
- 简图记录-linux内核同步基础
- 前后台分离开发 后台进行跨域设置
- 特斯拉首次正面回应在华建厂事宜!别高兴太早,独资建厂的特斯拉给不了你白菜价
- Spark Streaming与Flume集成小测试:PUSH的方式
- hash原理的理解
- 坚持一记----深度探索c++模型初读
- HashMap的工作原理