深入浅出Spring AOP面向切面编程实现原理方法

2023-11-19

1. 什么是AOP

AOP (Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现在不修改源代码的情况下,给程序动态统一添加功能的一种技术,可以理解成动态代理。是Spring框架中的一个重要内容。利用 AOP 可以对业务逻辑的各个部分进行隔离,使业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发的效率

2. Spring AOP

①. AOP 在Spring中的作用
提供声明式事务;允许用户自定义切面

②. AOP 的基本概念
横切关注点:跨越应用程序多个模块的方法或功能。即与我们业务逻辑无关,但需要我们关注的部分就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …

  • Aspect(切面):横切关注点被模块化的特殊对象。通常是一个类,里面可以定义切入点和通知
  • Weaving(织入):把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。 这些可以在编译时,类加载时和运行时完成。Spring和其它纯Java AOP框架一样,在运行时完成织入
  • Advice(通知):AOP在特定的切入点上执行的增强处理,是切面必须要完成的工作,也是类中的一个方法
  • Target(目标):被通知对象
  • AOP(代理):AOP框架创建的对象,代理就是目标对象的加强。* Spring中的 AOP 代理可以是 JDK 动态代理,也可以是 CGLIB 代理,前者基于接口,后者基于子类
  • JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用
  • Pointcut(切入点):就是带有通知的连接点,与切入点匹配的执行点
    ③. 使用Spring实现Aop
    前提
    使用AOP织入,需要导入一个依赖包
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.5</version>
</dependency>
实现Aop的三种方式

方式一:通过 Spring API 实现【主要是springAPI接口实现】

首先编写业务接口和实现类

public interface UserService {
  public void add();
  public void delete();
  public void update();
  public void search();
}
public class UserServiceImpl implements UserService{
  public void add() {
    System.out.println("增加了一个用户");
  }

  public void delete() {
    System.out.println("删除了一个用户");
  }

  public void update() {
    System.out.println("更新了一个用户");
  }

  public void select() {
    System.out.println("查询了一个用户");
  }
}

接着编写增强类,这里写两个:前置增强Log和后置增强AfterLog

import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class Log implements
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入浅出Spring AOP面向切面编程实现原理方法 的相关文章

随机推荐

  • QT程序用windeployqt打包后无法正常启动

    QT程序用windeployqt打包后无法正常启动 显示 应用程序无法正常启动 0xc000007b 请单击确定关闭应用程序 查看exe程序所在文件夹 qt的关键dll都已经拷贝到了 考虑到我的程序还依赖其他的dll工程 虽然依赖的dll也
  • 用ClickHouse 文件表引擎快速查询分析文件数据

    有时我们需要快速查询分析文件数据 正常流程需要在数据库中创建表 然后利用工具或编码导入数据 这时才能在数据库中查询分析 利用ClickHouse文件引擎可以快速查询文件数据 本文首先介绍ClickHouse文件引擎 然后介绍如何快速实现查询
  • MySQL基础(非常全)

    MySQL基础 一 MySQL概述 1 什么是数据库 答 数据的仓库 如 在ATM的示例中我们创建了一个 db 目录 称其为数据库 2 什么是 MySQL Oracle SQLite Access MS SQL Server等 答 他们均是
  • 【统一身份认证】详细讲解

    一 什么是统一身份认证 二 统一身份认证的构成 1 角色模型 用户 角色 权限 2 实现 前言
  • win10使用vscode+anaconda+Python环境配置(解决无法加载文件 \WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本)

    win10使用vscode anaconda Python环境配置 解决无法加载文件 WindowsPowerShell profile ps1 因为在此系统上禁止运行脚本 安装anaconda 为conda设置环境变量 conda 环境初
  • Linux文件权限

    Linux用户分为 拥有者 组群 Group 其他 other Linux系統中 预设的情況下 系統中所有的帐号与一般身份使用者 以及root的相关信息 都是记录在 etc passwd文件中 每个人的密码则是记录在 etc shadow文
  • C++11 标准新特性: 右值引用与转移语义

    新特性的目的 右值引用 Rvalue Referene 是 C 新标准 C 11 11 代表 2011 年 中引入的新特性 它实现了转移语义 Move Sementics 和精确传递 Perfect Forwarding 它的主要目的有两个
  • Linux服务器中查看进程的四种方法

    查看进程的四种方法 1 使用ps aux命令来查看 能以简单列表的形式显示出进程信息 ps aux用于报告当前系统的进程状态 可以搭配kill指令随时中断 删除不必要的程序 ps命令是最基本同时也是非常强大的进程查看命令 使用该命令可以确定
  • PTA乙级题目练习-卡拉兹(Callatz)猜想

    卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡拉兹在 1950 年的世界数学家大会上公布了这个猜想 传说当时
  • 静态编译 java_动态编译和静态编译及Java执行

    静态编译就是在编译的时候把你所有的模块都编译进exe里去 当你启动这个exe的时候所有模块都加载进来了 你写小程序没问题 但程序一大 加载的过程 就是当你运行程序时初始化的过程 就比较费力了 大多数ppc的硬件配置还是很一般的 动态编译就不
  • 新书《活用UML-需求分析高手》详细大纲(持续更新中)

    本书目前正在编写中 大纲可能会随时调整 欢迎各位朋友提出宝贵意见 欢迎到umlonline网站学习 活用UML 需求分析高手 课程在线版本 http www umlonline org school forum 26 1 html 目 录第
  • vs添加对dll的引用

    我们在使用vs进行开发调试的时候经常会遇到一个问题 就是当我们的主工程引用到其他工程更新的dll 我们经常采用copy到工程目录的方法 亦或者当我们的多个工程引用到同一个dll文件的时候 我们怎么来配置 1 将dll配置到环境变量 这种方法
  • 以渲染和ue独立游戏为接下来的主要学习任务。(独立游戏就是为单干做准备,不为跳槽涨薪,目标就是单干,找另外一种可能。)

    这段时间工作不好找 即使招聘网站上找我聊的 薪水也没有什么吸引力 所以不考虑跳槽 直接把精力放在渲染上 说不准还能涨涨薪 拿个年终奖 这条被哥们否定了 内部涨薪很困难 即使以前确实是从1万七涨到2万 也可能是因为人力看过流水 知道我是从两万
  • 微信小程序游戏怎么开发入门教程

    微信小程序游戏开发是现在比较热门的小程序类型开发项目 对于开发人员而言 怎么开发微信小程序游戏呢 今天小编分享一篇小游戏的入门开发教程 希望对微信小程序制作开发人员提供参考 第一步 注册一个小程序账号 在官方注册一个微信小程序账号 注册申请
  • springboot+thymeleaf+mybatis简单获取数据库数据

    1 数据库准备 建好需要的表 这里我的表是info list 2 文件创建 实体类Info public class Info private int id private String name public int getId retu
  • Android平台RTMP

    我们需要怎样的直播播放器 很多开发者在跟我聊天的时候 经常问我 为什么一个RTMP或RTSP播放器 你们需要设计那么多的接口 真的有必要吗 带着这样的疑惑 我们今天聊聊Android平台RTMP RTSP播放器常规功能 如软硬解码设置 实时
  • 5V转±12V无变压器双boost电路

    最近有个新项目 需要 10V范围的模拟量输出 非隔离 对于5V以下供电的控制板而言单端输出绝对没问题 可现在需要有正负输出 是少不了正负电源的 因此准备设计一个5V转 12V的电源 然后选择一个双向供电的运放 来实现单端模拟量信号向双向模拟
  • Blob类型介绍以及查看

    最近看到一个字段的类型是Blob有点懵逼 从Navigate上看只能看到一个 Blob 实际你去仔细看的话 分线字段大小不为空 而且每个大小不一样 说明该字段不仅不为空而且还有值且不一样 那这个Blob是什么呢 大名叫做binary lar
  • 程序员如何乘风破浪?从数据库历史看技术人发展

    2009 年我国数据库软件市场规模为 35 03 亿元 2017 年我国数据库软件市场规模增长至 120 00 亿元 8年时间内 我国数据库软件市场始终保持平稳增长 年均复合增长率为 17 5 且增速呈现递增趋势 根据中研产业研究院估计 到
  • 深入浅出Spring AOP面向切面编程实现原理方法

    1 什么是AOP AOP Aspect Oriented Programming 意为 面向切面编程 通过预编译方式和运行期动态代理实现在不修改源代码的情况下 给程序动态统一添加功能的一种技术 可以理解成动态代理 是Spring框架中的一个