AOP基础讲解

devtools/2024/10/21 14:35:21/

AOP 概述

AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过
预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
AOP 是 OOP 的延续,是软件开发中的一个热点,是 java 开发中的一个重要内
容。利用 AOP 可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的
耦合度降低,提高程序的可重用性,同时提高了开发的效率。
面向切面编程的好处就是: 减少重复,专注业务;
核心原理:
使用动态代理的方式在执行方法前后或者出现异常的时候做加入相关的逻辑.
使用案例:
事务处理:开启事务,关闭事务,出现异常后回滚事务
权限判断:在执行方法前,判断是否具有权限 日志:在执行前进行日志处理

AOP 的基本概念

连接点(
Joinpoint): 类中可以被增强的方法,这个方法就被称为连接点
切入点(pointcut): 类中有很多方法可以被增强,但实际中只有 add 和 update
被增了,那么 add 和 update 方法就被称为切入点(实际实现的连接点)
通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。通
知分为方法执行前通知,方法执行后通知,环绕通知等.
目标(Target): 代理的目标对象(连接点,切入点所在类)
代理(Proxy): 向目标对象应用通知时创建的代理对象

springAOP 实现

对于 AOP 这种编程思想,很多框架都进行了实现。Spring 就是其中之一,
可以完成面向切面编程。
AspectJ 是一个基于 Java 语言的 AOP 框架,它提供了强大的 AOP 功能,且其实
现方式更为简捷,使用更为方便, 而且还支持注解式开发。所以,Spring 又
将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中。
下载 AOP 相关 jar
<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.2.RELEASE</version></dependency>
AspectJ 中常用的通知有五种类型:
前置通知,后置通知,环绕通知,异常通知,返回通知.
@Before 前置通知:方法执行之前
@After 后置通知:方法执行之后,无论是否出现异常
@AfterReturnning 返回通知:方法成功执行之后通知,出现异常不执行
@AfterThrowing 异常通知:抛出异常之后通知
@Around 环绕通知:方法执行前后都有通知
基于注解方式的实现
启动 AspectJ 支持:<aop:aspectj-autoproxy />
定义通知:
java">@Component
@Aspect
public class AOPDemo {@Before("execution(* com.ff.spring.dao.UserDao.*(..))")public void saveLog() {System.out.println("saveLog");}@AfterThrowing(value = "execution(*com.ff.spring.dao.UserDao.*(..))", throwing = "e")public void afterthrow(Throwable e) {System.out.println("afterthrow");}public void aroundAdvice(ProceedingJoinPoint joinPoint) {try {//前置通知 // Object[] objects = joinPoint.getArgs(); // joinPoint.proceed();// 调用我们自己的目标方法 // 返回通知 // } // catch (Throwable throwable) // { throwable.printStackTrace(); // 异常通知 } // 后置通知 // } // }}


http://www.ppmy.cn/devtools/103189.html

相关文章

MySQL 延迟从库介绍

前言&#xff1a; 我们都知道&#xff0c;MySQL 主从延迟是一件很难避免的情况&#xff0c;从库难免会偶尔追不上主库&#xff0c;特别是主库有大事务或者执行 DDL 的时候。MySQL 除了这种正常从库外&#xff0c;还可以设置延迟从库&#xff0c;顾名思义就是故意让从库落后于主…

Android解析异步消息处理机制

文章目录 Android解析异步消息处理机制MessageHandlerMessageQueueLooper Android解析异步消息处理机制 Android中的异步消息处理主要由4个部分组成&#xff1a;Message、Handler、MessageQueue和Looper。其中Message和Handler在上一小节中我们已经接触过了&#xff0c;而Mess…

AI模型:追求全能还是专精?

关于全能型AI和专业型AI产品的比较&#xff0c;确实是一个非常有趣的讨论。以下是我对这两类AI产品的优劣及未来潜力的看法。 一、全能型AI的特点与优劣 特点&#xff1a; 广泛适用性&#xff1a;全能型AI能够处理多个领域的问题&#xff0c;从数学解题到市场营销策略&#…

数据仓库系列12:如何设计一个高效的ETL流程?

你是否曾经面对过这样的场景:数据量激增,处理时间延长,系统性能下降?作为一名大数据开发人员,我深知高效的ETL(提取、转换、加载)流程对于数据仓库的重要性。今天,让我们一起探索如何设计一个能够应对海量数据、保证数据质量、并且高效运行的ETL流程。 目录 1. 为什么ETL流程…

MybatisPlus的LambdaQueryWrapper用法

LambdaQueryWrapper<Tag> 是 MyBatis-Plus 框架中的一个功能强大的查询构造器&#xff0c;它用于构建 SQL 查询条件&#xff0c;特别是针对 Lambda 表达式的支持&#xff0c;使得代码更加简洁、类型安全。在这个例子中&#xff0c;LambdaQueryWrapper<Tag> 被用来构…

【项目日记】高并发内存池项目---整体框架设计

比起那些用大嗓门企图压制世界的人&#xff0c; 让全世界都安静下来听你小声说话的人更可畏。 --- 韩寒 《告白与告别》--- 高并发内存池项目---整体框架设计 1 整体框架2 线程缓存3 中心缓存4 页缓存 1 整体框架 现代很多的开发环境都是多核多线程&#xff0c;在申请内存的…

SpringBoot集成kafka-消费者批量消费消息

SpringBoot集成kafka-消费者批量消费消息 1、消费者2、生产者3、application.yml配置文件4、实体类5、生产者发送消息测试类6、测试6.1、测试启动生产者6.2、测试启动消费者 1、消费者 设置批量接收消息 package com.power.consumer;import org.apache.kafka.clients.consume…

QT Mainwindow下指定控件的setMouseTracking(true)和mousemoveevent函数失效-问题解决

目录&#xff1a; 一&#xff0c;问题描述二&#xff0c;解决方法2.1解决依据2.2方法实操 三&#xff0c;参考资料 一&#xff0c;问题描述 ☀️之前碰到过的一个问题&#xff0c;现在分享出来&#xff1a;想在qt哪里搞个鼠标移动在控件显示的图片上&#xff0c;然后实时显示对…