SpringAOP之动态代理
前提
最近看到Spring-Aop(面向切面编程)的实现基于动态代理,特此记录学习一下。
什么是动态代理?
- 代理:当目标对象无法直接访问,创建一个客户端和目标对象之间的中介,这个中介可以被称为代理。
- 动态: 使用反射机制,在程序执行的时候,创建代理类对象。
动态代理:在程序执行中,利用jdk的反射机制,创建代理类对象,并动态指定要代理的对象
动态代理的作用
- 在不改变已有代码的基础上,通过代理来横向拓展增强其他的功能;
(A写好了一个功能,你可以使用,但是A的功能不满足你的要求,因此可以通过代理A的功能代码,而不用修改原有的代码进行增加) - 当目标类不允许直接访问(a类实现功能调用c类,但c类不允许a调用),因此可以创建代理b,让a访问b,b再访问c;
- 减少重复的代码;
- 专注业务逻辑代码;
- 解耦,让业务代码与非业务代码分离。
实现代理的方式?
1.静态代理
特点:
- 代理类需要自己手动创建
- 被代理的目标类是确定的
缺点:
- 当需要被代理的目标类增加时,代理类也会成倍增加
- 当接口中功能增加或者修改,对代理类、被代理类都会造成影响
2.动态代理
方式1:jdk动态代理
具体:基于java.lang.reflect的三个类:
- invocationHandler
- Method
- Proxy
要求:目标类是一个实现接口类,必须实现某个接口
方式2:cglib动态代理
要求:目标类能被继承,即class和method不能是final
3.具体实现步骤
jdk动态代理实现步骤:
- 创建接口,定义目标类要实现的方法(功能)
- 创建目标类实现接口
- 创建InvocationHandler接口的实现类(代理类),重写invoke方法,在方法中完成需要代理的功能;
- 利用Proxy类创建代理对象------>newProxyInstance
- 将类加载器和实现接口给代理对象
- 利用代理对象调用目标类方法,自动调用invoke方法,使功能增强。
SpringAOP之动态代理相关推荐
- SpringAOP JDK动态代理
1.本篇博客的背景和目的 目前我本人正在学习SpringFramework的知识,这也是这个专栏的主题.我前面的几篇博文中,简单的认识了一下SpringFramework,记录了SpringFrame ...
- 注解的方式实现动态代理基于SpringAOP
1.配置spring容器 导入jar包 com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.j ...
- SpringAOP静态代理和动态代理
代理模式应用于SpringAOP. SpringAOP.即面向切面的编程范式.多用于权限控制,异常处理,日志管理等场景.主要作用是分离功能性需求和非功能性需求,减少代码冗余.我们在使用的时候可以集中处 ...
- AOP 拦截器 JDK动态代理机制 struts2 mybatis spring-aop
struts2拦截器兑现原理(转) struts2拦截器实现原理(转) 第一步:创建目标对象的接口 /** * 目标对象的接口 JDK的动态代理要求目标对象必须实现一个接口 * * @author ...
- Java Spring-AOP动态代理-JDK和CGlib实现
Java Spring-AOP CGlib和JDK动态代理实现 编码是为了解决生活中的问题,譬如现在我想用筷子吃饭的时候看手机,那么首先会有两个对象. 现在如果是面向对象编程思想,我们会new一个筷子 ...
- spring AOP原理分析:静态代理;JDK实现接口动态代理;Cglib继承父类代理;SpringAop的责任链模式调用
普通静态代理 代理类和真实类都需要实现同一个接口 接口 package com.fchan.layui.represent.service; /*** 静态代理demo*/ public interf ...
- Spring-AOP动态代理技术(底层代码)
1.JDK代理:基于接口的动态代理技术 目标对象必须有接口,目标对象有什么方法,目标接口就有什么方法, 运行期间基于接口动态生成代理对象,所以代理对象也就有目标对象同样的方法. 注意:以下代码只是底层 ...
- SpringAOP的CGLIB动态代理的底层原理实现
欢迎加入java学习讨论群:725562382 CGLIB动态代理: CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以 ...
- SpringAop篇 (1) AOP 基础之动态代理的实现
介绍 Spring AOP 主要通过 动态代理 来实现的,所以我们需要在介绍 AOP 用法之前,先来介绍下动态代理的用法以及本质. 对于动态代理的理解可以借鉴普通代理模式.我们普通的Java代理需要为 ...
- SpringAop动态代理的两种实现方式
Spring的面向切面编程也是基于动态代理来实现的 静态代理:也就是自己手动创建的代理对象 动态代理:也就是在程序运行中通过配置参生的 那么Spring的AOP也就是面向切面编程,就是基于动态代理来实 ...
最新文章
- Linux pip安装包。解决:You should consider upgrading via the 'pip install --upgrade pip' command.
- Python导入其他文件中的.py文件 即模块
- 【牛客 - 696C】小w的禁忌与小G的长诗(dp 或 推公式容斥)
- 真格量化——50期权历史波动率策略
- linux进程运行队列,Linux进程调度中队列的使用
- Struts知识问答
- 营业执照吊销后,股权何去何从?
- android 消息系统Handler、MessageQueue、Looper源代码学习
- 萤石云平台接入_前端接入萤石云视频
- 运用ssis组件实现邮件发送,内容来源于数据库表
- 漏洞利用六:Linux系统漏洞利用
- 只有那些不断充实自己的人,才有机会在往后的日子里持续地被雇用
- 高仿微信6.5.7(融云版)
- JDBC心得体会--总结
- vscode如何同时运行多个vue项目
- Hinton 最新研究:神经网络的未来是前向-前向算法
- (1.5.1.3)编程之美:一摞烙饼的排序
- 《缠中说禅108课》49:利润率最大的操作模式
- matlab画y x 2,matlab怎么绘制z=sqrt(x^2 y^2)的图像
- 有哪些初学者程序员不知道的小技巧?
热门文章
- 大学计算机基础通俗易懂教材,大学计算机基础(21世纪高等学校计算机规划教材)...
- windows系统安装wget指令
- Python 之字典(dict)根据 value 获取 key
- 奈奎斯特与香农定理_奈奎斯特定律和香农定理
- IDEA的类注释模板
- 一分钟教会你固态硬盘数据恢复方法
- Coordinate Transformations(坐标系的变换)
- 二进制与十六进制转换对照表
- android 读写txt文件,Android:将文本写入txt
- [007]爬虫系列 | RPC调用简单示例