因为jdk带来具有局限性,使用动态代理的对象必须实现一个或多个接口,CGLIB代理不需要实现接口

UserDao.java目标类:

package com.liu.cglib;//目标类
public class UserDao {public void addUser() {System.out.println("添加方法");}public void deleteUser() {System.out.println("删除方法");}}

CglibProxy.java代理类:

package com.liu.cglib;import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
//代理类import com.liu.aspect.MyAspect;public class CglibProxy implements MethodInterceptor{//创建代理方法public Object createProxy(Object object) {//创建一个动态类对象Enhancer enhancer = new Enhancer();//确定需要增强的类 设置其父类enhancer.setSuperclass(object.getClass());//添加回调函数enhancer.setCallback(this);//返回创建的代理类return enhancer.create();}//proxy cglib根据定义的父类生成的代理对象//method  拦截的方法//args  拦截的方法的参数数组//methProxy  方法的代理对象 用于执行父类的方法@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methProxy) throws Throwable {// TODO Auto-generated method stub//创建切面对象MyAspect myAspect = new MyAspect();//前置增强myAspect.chek();//目标方法执行Object obj = methProxy.invokeSuper(proxy, args);//后置增强myAspect.log();return obj;}}

MyAspect.java切面类:

package com.liu.aspect;//切面类:里面可以存在多个advice通知方法 也就是增强类
public class MyAspect {public void chek() {System.out.println("模拟检查方法....");}public void log() {System.out.println("模拟记录日志....");}
}

CglibTest.java测试类:

package com.liu.cglib;public class CglibTest {public static void main(String[] args) {//创建代理对象CglibProxy cglibProxy = new CglibProxy(); //创建目标对象UserDao userDao = new UserDao();//将目标对象传入代理对象中   获取增强后的方法UserDao userDao2 = (UserDao) cglibProxy.createProxy(userDao);//执行userDao2.addUser();userDao2.deleteUser();}}

运行结果:

模拟检查方法....
添加方法
模拟记录日志....
模拟检查方法....
删除方法
模拟记录日志....

JDK动态代理:https://blog.csdn.net/weixin_45151960/article/details/104602936

spring中的CGLIB动态代理(代码)相关推荐

  1. java中的静态、动态代理模式以及Spring中的CgLib动态代理解读(面试必问)

    java中的静态.动态代理模式以及Spring中的CgLib动态代理解读(面试必问) 静态代理 动态代理 CgLib动态代理     基础知: 反射知识 代理(Proxy)是一种设计模式,提供了对目标 ...

  2. spring中的jdk动态代理(代码步骤)

    UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...

  3. JDK和cglib动态代理代码示例

    JDK和cglib动态代理代码: package com.zhangxueliang.demo.proxy;import java.lang.reflect.InvocationHandler; im ...

  4. jdk、cglib动态代理代码示例

    文章目录 jdk动态代理 实现步骤 代码示例 新建一个接口 新建一个接口的实现类 新建一个代理类 调用测试 cglib动态代理实现 实现步骤 创建一个实现类 新建一个代理类 调用测试 jdk动态代理 ...

  5. jdk动态代理实例和cglib动态代理实例_CGLib 动态代理 原理解析

    JDK 动态代理实现与原理 首先来看一段CGLib代理的测试代码(MethodInterceptor的测试, 其他类型这里不做展开了). Util类的代码在后面给出的码云片段中 public 下面的输 ...

  6. Spring Boot实践——Spring AOP实现之动态代理

    Spring AOP 介绍 AOP的介绍可以查看 Spring Boot实践--AOP实现 与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改 ...

  7. Java设计模式-----Cglib动态代理(Cglib Proxy)

    接上文:4.2Java设计模式-----JDK动态代理(Dynamic Proxy) Cglib动态代理 百度百科:Cglib是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java ...

  8. spring框架中JDK和CGLIB动态代理区别

    转载:https://blog.csdn.net/yhl_jxy/article/details/80635012 前言 JDK动态代理实现原理(jdk8):https://blog.csdn.net ...

  9. 浅谈Spring中JDK动态代理与CGLIB动态代理

    前言 Spring是Java程序员基本不可能绕开的一个框架,它的核心思想是IOC(控制反转)和AOP(面向切面编程).在Spring中这两个核心思想都是基于设计模式实现的,IOC思想的实现基于工厂模式 ...

最新文章

  1. anaconda创建菜单失败
  2. OCS2007安装配置指南
  3. 跨域解决方案一:使用CORS实现跨域
  4. 数据库原理与应用(SQL Server)笔记 第五章 索引和视图
  5. 网络day02-设备配置远程登录
  6. Linux系统下搭建BUG管理系统---禅道
  7. job.php打不开,cronjob上的PHP错误,在提示时工作正常
  8. Soul回应下架整改:将严格审核相关功能和内容
  9. layui 日期插件onchange事件失效的方法
  10. 蓝桥杯 ALGO-37 算法训练 Hankson的趣味题
  11. zabbix node.js mysql_Zabbix添加Node.js监控的方法
  12. Linux进程调度原理【转】
  13. 代码整洁之道读书笔记----第四章---注释--第一节-什么是好注释如何写好注释
  14. 有了这款geek卸载工具,让你卸载不在烦恼!
  15. seo如何优化一个网站
  16. 网页访问localhost出现用户名和密码登录弹窗
  17. linux系统发送短信,使用Linux发送短信
  18. 微擎支付返回商户单号_微信刷脸支付流程是怎么样的?
  19. 惠云转债上市价格预测
  20. 营销自动化的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 流程审批OA办公系统解决财务报销等问题
  2. webpack把源代码里面的console和debugger全部去掉_在webpack中,module、chunk和bundle到底是什么样的存在?...
  3. linux线程调度函数,Linux调度策略及线程优先级设置
  4. 扩展虚拟机Ubuntu磁盘容量空间
  5. 零基础学Python:函数的参数详解
  6. Python格式化字符串、占位符、合并数组
  7. python创建与遍历List二维列表
  8. Python连接字符串用join还是+
  9. python中单个和批量增加更新的mysql(没有则插入,有则更新)
  10. [python]函数默认参数顺序问题