spring中的CGLIB动态代理(代码)
因为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动态代理(代码)相关推荐
- java中的静态、动态代理模式以及Spring中的CgLib动态代理解读(面试必问)
java中的静态.动态代理模式以及Spring中的CgLib动态代理解读(面试必问) 静态代理 动态代理 CgLib动态代理 基础知: 反射知识 代理(Proxy)是一种设计模式,提供了对目标 ...
- spring中的jdk动态代理(代码步骤)
UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...
- JDK和cglib动态代理代码示例
JDK和cglib动态代理代码: package com.zhangxueliang.demo.proxy;import java.lang.reflect.InvocationHandler; im ...
- jdk、cglib动态代理代码示例
文章目录 jdk动态代理 实现步骤 代码示例 新建一个接口 新建一个接口的实现类 新建一个代理类 调用测试 cglib动态代理实现 实现步骤 创建一个实现类 新建一个代理类 调用测试 jdk动态代理 ...
- jdk动态代理实例和cglib动态代理实例_CGLib 动态代理 原理解析
JDK 动态代理实现与原理 首先来看一段CGLib代理的测试代码(MethodInterceptor的测试, 其他类型这里不做展开了). Util类的代码在后面给出的码云片段中 public 下面的输 ...
- Spring Boot实践——Spring AOP实现之动态代理
Spring AOP 介绍 AOP的介绍可以查看 Spring Boot实践--AOP实现 与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改 ...
- Java设计模式-----Cglib动态代理(Cglib Proxy)
接上文:4.2Java设计模式-----JDK动态代理(Dynamic Proxy) Cglib动态代理 百度百科:Cglib是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java ...
- spring框架中JDK和CGLIB动态代理区别
转载:https://blog.csdn.net/yhl_jxy/article/details/80635012 前言 JDK动态代理实现原理(jdk8):https://blog.csdn.net ...
- 浅谈Spring中JDK动态代理与CGLIB动态代理
前言 Spring是Java程序员基本不可能绕开的一个框架,它的核心思想是IOC(控制反转)和AOP(面向切面编程).在Spring中这两个核心思想都是基于设计模式实现的,IOC思想的实现基于工厂模式 ...
最新文章
- anaconda创建菜单失败
- OCS2007安装配置指南
- 跨域解决方案一:使用CORS实现跨域
- 数据库原理与应用(SQL Server)笔记 第五章 索引和视图
- 网络day02-设备配置远程登录
- Linux系统下搭建BUG管理系统---禅道
- job.php打不开,cronjob上的PHP错误,在提示时工作正常
- Soul回应下架整改:将严格审核相关功能和内容
- layui 日期插件onchange事件失效的方法
- 蓝桥杯 ALGO-37 算法训练 Hankson的趣味题
- zabbix node.js mysql_Zabbix添加Node.js监控的方法
- Linux进程调度原理【转】
- 代码整洁之道读书笔记----第四章---注释--第一节-什么是好注释如何写好注释
- 有了这款geek卸载工具,让你卸载不在烦恼!
- seo如何优化一个网站
- 网页访问localhost出现用户名和密码登录弹窗
- linux系统发送短信,使用Linux发送短信
- 微擎支付返回商户单号_微信刷脸支付流程是怎么样的?
- 惠云转债上市价格预测
- 营销自动化的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
热门文章
- 流程审批OA办公系统解决财务报销等问题
- webpack把源代码里面的console和debugger全部去掉_在webpack中,module、chunk和bundle到底是什么样的存在?...
- linux线程调度函数,Linux调度策略及线程优先级设置
- 扩展虚拟机Ubuntu磁盘容量空间
- 零基础学Python:函数的参数详解
- Python格式化字符串、占位符、合并数组
- python创建与遍历List二维列表
- Python连接字符串用join还是+
- python中单个和批量增加更新的mysql(没有则插入,有则更新)
- [python]函数默认参数顺序问题