SSM框架学习-AOP介绍及简单案例

news2024/11/25 22:47:13

1. AOP介绍

  1. 面向切面编程(Aspect-oriented programming,简称AOP),是一种编程思想和技术,用于将应用程序的业务逻辑与系统服务(例如事务、日志记录、安全性等)进行分离。AOP可以通过在代码中插入预定义的代码片段(称为“切面”)来实现这一目标,而不需要修改应用程序源代码

  2. AOP本质上是OOP(面向对象编程)的一种补充和扩展,在OOP中,应用程序的基本单位是类和对象,而AOP将注意力转移到了针对系统服务的横向切面(Cross-CuttingConcerns),例如事务管理、安全性、日志记录等。这样,AOP 能够提高应用程序的模块化和系统的可维护性

  3. 在AOP中
    一个切面定义了一个关注点(Concern),并且指定了应该在何处(如何匹配连接点)和何时(如何通知)执行的代码。
    连接点(JoinPoint)是指在应用程序中切面可以插入处理的点,例如方法调用、异常处理和对象初始化等,在SpringAOP中,理解为方法的执行
    通知(Advice)则是在特定连接点上执行的代码。可以定义多种通知类型,如前置通知(BeforeAdvice)、后置通知(After Advice)、异常通知(After-ThrowingAdvice)、最终通知(After-Finally Advice)和环绕通知(Around Advice)等。
    切面(Aspect):描述通知与切入点的对应关系

  4. Spring框架提供了强大的AOP支持,包括基于代理的AOP和基于字节码的AOP两种方式。Spring AOP采用面向切面编程思想来实现横向业务逻辑的划分,在框架和应用程序中广泛应用。例如Spring框架中的声明式事务管理就是其中重要的应用。

作用就是在不动原始设计的基础上为其进行功能增强
在这里插入图片描述

2. 简单案例

注:@ComponentScan是Spring框架中的一个注解,用于自动扫描并加载指定包下的所有Spring组件(如@Service,@Repository,@Controller,@Configurations等)

2.1 导入坐标

在这里插入图片描述

所以导入spring-context

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.4</version>
    </dependency>
  </dependencies>

2.2 制作连接点方法(原始操作、Dao接口、实现类)

@Repository是Spring框架中专门用于标注数据访问层(DAO层,Data Access Object)的注解,用于解决在数据访问层中(exception)转化为Spring的DataAccessException,实现了不同于其他异常的补充,并将底层的JDBC异常转化为Spring的异常。同时,它提供了注解化DAO层的功能,避免了过多样板式的代码。

@Repository
public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println(System.currentTimeMillis());
        System.out.println("book dao save ...");
    }

    public void update(){
        System.out.println("book dao update ...");
    }
}

2.3 制作共性功能

设置一个共性功能的例子

public void method(){
        System.out.println(System.currentTimeMillis());
    }

2.4 定义切入点

2.5 绑定切入点与通知关系(切面)

//通知类必须配置成Spring管理的bean
//@Component将其变成Spring可以控制的bean
@Component
//设置当前类为切面类类
@Aspect
public class MyAdvice {
    //设置切入点,要求配置在方法上方
    @Pointcut("execution(void com.itheima.dao.BookDao.update())")
    private void pt(){}

    //设置在切入点pt()的前面运行当前操作(前置通知)
    @Before("pt()")
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

在SpringConfig中声明一下当前是用注解开发的AOP

@Configuration
@ComponentScan("com.itheima")
//开启注解开发AOP功能
@EnableAspectJAutoProxy
public class SpringConfig {
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多ip,多端口、多域名访问多网站

目录标题 多ip访问多网站当前主机配置多个ip同行配置基于多个虚拟主机标签配置多个网站站点根据配置创建对应资源文件 多端口访问多网站根据配置创建对应资源文件重启httpd服务 基于域名访问多网站创建对应资源文件重启服务 排错方式启动不成功&#xff08;配置文件有问题&…

技术好≠薪资高,业务价值才是王道

2023年软件测试为什么发生巨变&#xff1f; 2023年了&#xff0c;软件测试行业发生了很大的改变&#xff0c;就像今年的金三银四不像是一个高峰期&#xff0c;我觉得有以下原因&#xff1a; 1、整个IT技术人员在行业内角色的转变 变化的一个原因就是现在变成了纯业务价值的导…

stm32 iic调试ds1307 rtc时钟

使用代码 (1条消息) stm32iic调试ds1307rtc时钟&#xff0c;采用iic接口&#xff0c;驱动软件&#xff0c;可以设置&#xff0c;读取ds1307时钟代码资源-CSDN文库 使用STM32调试ds1307&#xff0c;采用iic接口&#xff0c;由于有个项目需要使用外部RTC功能&#xff0c;所以需…

JimuReport积木报表 v1.5.8版本发布—免费的数据可视化报表

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

用frp开源工具,实现内网穿透(详细教程)

本文转载于&#xff1a; https://blog.csdn.net/qq_40903527/article/details/123850647 选取其中的frp内网穿透方式&#xff0c;给大家分享本此教程供大家参考。 ^ - ^ 如果你有一台云服务器&#xff08;有公网IP&#xff09;&#xff0c;或者有使用权&#xff0c;那么 在开…

Vue使用keep-Alive实现从详情页返回到列表页,还能记住当前的page页码以及切换的tab选项

哈喽&#xff0c;大家好&#xff0c;今天遇到一个小需求&#xff0c;就是要求从订单详情页返回到订单列表页&#xff0c;定位到跳转前的page页码和切换对应的tab选项 从我看了大量博主写的文章后&#xff0c;发现可以使用vue中的keep-Alive知识 下面是Vue中讲解keep-alive K…

我先肝了,爆火的Java全能笔记,分布式/开源框架/微服务/性能调优全有

前言 程序员&#xff0c;立之根本还是技术&#xff0c;一个程序员的好坏&#xff0c;虽然不能完全用技术强弱来判断&#xff0c;但是技术水平一定是基础&#xff0c;技术差的程序员只能CRUD&#xff0c;技术不深的程序员也成不了架构师。程序员对于技术的掌握&#xff0c;除了…

如何选择合适的智能氮气柜?

随着电子产品的普及&#xff0c;IC、半导体、精密元件、检测仪器之类的物品对湿度要求越来越高&#xff0c;潮湿、霉菌和金属氧化所造成的损害&#xff0c;随时在发生。人们对于物品的存放环境要求逐渐提高&#xff0c;利用防潮设备如智能氮气柜、电子防潮柜来存储产品也越来越…

《编程思维与实践》1060.浮点数加法

《编程思维与实践》1060.浮点数加法 题目 思路 浮点数可以分为[整数部分].[小数部分],可以将两个部分分开处理,最后再合并,但在处理四舍五入时较为繁琐, 为了方便起见,这里采用将两个部分一起处理的方式: 由于浮点数不超过500位:整数部分最多500位,小数部分最多500位, 所以加法…

gpio 子系统驱动LED

gpio 子系统 API 函数 1、gpio_request 函数 gpio_request 函数用于申请一个 GPIO 管脚&#xff0c;在使用一个 GPIO 之前一定要使用 gpio_request 进行申请&#xff0c;函数原型如下&#xff1a; int gpio_request(unsigned gpio, const char *label)/*函数参数和返回值含义如…

企业应该如何做到数字化转型成功?

01 成长型企业数字化转型的意义 成长型企业想要实现数字化转型&#xff0c;那么我们需要先弄明白&#xff0c;对于成长型企业而言&#xff0c;数字化转型到底具有什么意义&#xff1f;希望实现哪些目标&#xff1f; 可以归结为以下四点&#xff1a; 提升企业的生产力和效率&…

吴恩达机器学习课程的重点内容解析

吴恩达&#xff08;Andrew Ng&#xff09;教授是机器学习领域的知名专家&#xff0c;其机器学习课程在全球范围内备受欢迎。本文将解析吴恩达机器学习课程的重点内容&#xff0c;帮助读者了解机器学习的基本原理、常见算法和实践技巧。 一、机器学习简介 在课程的第一部分&…

今年这面试难度,我给跪了……

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

Winforms不可见组件开发

Winforms不可见组件开发 首先介绍基本知识,有很多的朋友搞不清楚Component与Control之间的区别,比较简单形象的区别有下面两点: 1、Component在运行时不能呈现UI,而Control可以在运行时呈现UI。 2、Component是贴在容器Container上的,而Control则是贴…

流控验证太麻烦?不敢上生产?MSE 有办法!

作者&#xff1a;涯客 影响服务稳定性的因素有很多&#xff0c;其中比较常见但又往往容易被忽视的就是面向流量的稳定性&#xff0c;流控是保障服务稳定性的重要手段。但是&#xff0c;我们发现大量客户仅仅在开发环境和预发环境中测试流控&#xff0c;却在生产环境中鲜有使用…

FastJson常用的API整理

工作的时候一直用到fastjson做JavaBean和Json的转化&#xff0c;最近工作的时候对fastjson的API的理解有点混乱&#xff0c;所以做了整理。 一、对象类型梳理 首先要明确在转换中涉及到的五个类型的对象&#xff0c;分别是&#xff1a;JavaObject、JavaObjectList、JsonStrin…

C语言初阶之三子棋

三子棋 初始文件建立主函数文件棋盘的初始化&#xff08;InitBoard&#xff09;打印棋盘&#xff08;DisplayBoard&#xff09;玩家下棋&#xff08;PlayerMove&#xff09;电脑下棋&#xff08;ComputerMove&#xff09;判定胜负所有代码game.hgame.ctest.c 结语 初始文件建立…

一文总结Redis面试知识点

文章目录 Redis知识点知识点1 缓存穿透知识点2 布隆过滤器知识点3 缓存击穿知识点4 缓存雪崩知识点4 双写一致性知识点5 Redis持久化知识点6 数据过期策略知识点7 数据淘汰策略知识点8 分布式锁知识点9 主从复制知识点10 哨兵模式知识点11 分片集群知识点12 IO多路复用 Redis问…

零信任安全:综合网络安全方法

在当今的数字世界&#xff0c;网络威胁日益复杂&#xff0c;使得组织更加难以保护敏感数据和系统的安全。为应对当前的网络威胁&#xff0c;全新的“零信任”安全模型应运而生。 零信任安全作为一种网络安全方法&#xff0c;要求组织必须验证每一次访问尝试&#xff0c;无论访…

云发布的Docker部署文档

云发布的Docker部署文档 文章目录 云发布的Docker部署文档1、服务器安装 Docker2、修改后端微服务的配置2.1 修改 MySQL 的配置2.2 修改 Redis 的配置2.3 修改 Nacos 的配置 3、生成微服务镜像4、拉取远程镜像5、生成前端镜像5.1 准备文件5.2 构建前端镜像 6、基于镜像生成并运…