当前位置: 首页 > news >正文

Spring框架-AOP

1. 代理模式

为某一个对象(委托类)提供一个代理(代理类),用来控制对这个对象的访问。委托类和代理类有一个共同的父类或父接口。

代理类会对请求做预处理、过滤、将请求分配给指定对象。

生活中常见的代理模式:

        房东委托中介出租房子

        婚庆公司

代理模式的两个设计原则:

1. 代理类与委托类具有相似的香味

2. 代理类增强委托类的行为

常见的代理模式:

静态代理

动态代理

 代理的三要素:

有共同的行为 - 定义接口

目标角色/真实角色(新人)- 实现接口

代理角色 - 实现接口 增强用户行为

2. 静态代理的特点

1. 目标角色固定

2. 在应用程序之前就得知目标角色

3. 代理对象会增强目标对象的行为

4. 有可能存在多个代理,产生“类爆炸”(缺点)

3. 动态代理

        相比于静态代理,动态代理在创建代理对象上更加的灵活,动态代理类的字节码在程序运行时,由Java反射机制动态产生。它会根据需要,通过反射机制在程序运行期,动态的为目标对象创建代理对象,无需程序员手动编写它的源代码。动态代理不仅简化了编程工作,而且提高了软件系统的可扩展性,因为反射机制可以生成任意类型的动态代理类。代理的行为可以代理多个方法,既满足生产需要的同时又达到代码通用的目的。

        动态代理的两种实现方式:

                1. JDK动态代理

                2. CGLIB动态代理

3.1 动态代理的特点

1. 目标对象不固定

2. 在程序运行时,动态创建目标对象

3. 代理对象会增强目标对象的行为

3.2 JDK动态代理

3.2.1 newProxyInstance

Proxy类:Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下操作方法:

/*
    返回一个指定接口的代理类的实例方法调用分派到指定的调用处理程序。(返回代理对象)
    loader: 一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载
    interfaces: 一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我        提供了一组接口给它,那么这个代理对象就宣城实现了该接口(多态),这样我就能调用这组接口中的方法了
    h: 一个InvocationHandler接口,表示代理实例的调用处理程序实现的接口。每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的invoke方法

*/
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

4. Spring AOP

4.1 什么是AOP

        Aspect Oriented Programming 面向切面编程,相比较OOP面向对象编程来说,AOP关注的不再是程序代码中某个类,某些方法,AOP考虑更多的是一种面到面的切入,即层与层之间的一种切入,所以称之为切面。

4.2 AOP能做什么

AOP主要应用于日志记录性能统计安全控制事务处理等方面,实现公共功能性的重复使用

4.3 AOP的特点

1. 降低模块与模块之间的耦合度,提高业务代码的聚合度。(高内聚低耦合)

2. 提高了代码的复用性

3. 提高系统的扩展性

4. 可以在不影响原有的功能基础上添加新的功能

4.4 AOP的底层实现

动态代理(JDK+CGLIB)

5. Spring AOP 环境搭建

5.1 坐标依赖引入

5.2 添加spring.xml的配置

相关文章:

  • 【C语言】C语言 食堂自动化管理系统(源码+数据文件)【独一无二】
  • 【git】已上传虚拟环境的项目更改成不再上传虚拟环境
  • cmake:定位Qt的ui文件
  • 练习题:41
  • VideoPipe-使用VLC构建RTSP串流显示
  • 核函数简述
  • RagFlow+Ollama 构建RAG私有化知识库
  • python进阶篇-面向对象
  • 梁文锋亲自挂名DeepSeek发布新论文
  • 将jar安装到Maven本地仓库中
  • 用STC-ISP写延时函数
  • vue从入门到精通(十):绑定样式
  • 从零开始构建一个小型字符级语言模型的详细教程(基于Transformer架构)之一数据准备
  • 6.【线性代数】—— 列空间和零空间
  • spring cloud 微服务部署(2025年)第三章:Nacos、LoadBalancer、GateWay、Ribbon集成之网关Gateway部署
  • 【Java】逻辑运算符详解:、|| 与、 | 的区别及应用
  • 解锁D3.js与PlantUML的交互奥秘:探索知识图谱数据可视化新领域
  • AI工具篇:利用DeepSeek+Kimi 辅助生成综述汇报PPT
  • Spring Boot 自动装配原理深度剖析
  • 网络分析仪E5071C的回波损耗测量
  • 中标多家学校采购项目的App查成绩需付费?涉事公司回应
  • 新华社:赵心童世锦赛夺冠,中国书写斯诺克运动新历史
  • 想要“逆转”糖尿病,减少这两处脂肪是关键
  • 普京称俄中关系对维护世界稳定具有战略意义
  • 释新闻|新加坡大选今日投票:除了黄循财首次挂帅,还有哪些看点
  • 申活观察|咖香涌动北外滩,带来哪些消费新想象?