1.3 初探Spring AOP

news/2024/5/18 13:26:04

在这里插入图片描述
本次课,我们深入了解了Spring框架中的AOP(面向切面编程)概念,它是一种编程范式,用于处理那些在多个类中重复出现、与业务逻辑无关的横切关注点,如日志记录、事务管理等。AOP与OOP(面向对象编程)是互补的,OOP通过封装、继承和多态性来组织代码,而AOP则关注程序内部的横向关系。

Spring框架支持两种AOP的使用方式:配置方式和注解方式。配置方式通过XML配置文件来定义AOP的切面、切点和通知,而注解方式则使用Java注解来简化配置。

在示例中,我们看到了如何使用AOP来改进一个骑士执行任务的程序。在未使用AOP的传统方式中,每个骑士类都需要在执行任务前后手动调用特定的方法,这导致了代码的重复和高耦合性。通过引入AOP,我们可以将这些重复的行为(如游吟诗人在骑士出发前和凯旋后唱赞歌)封装到一个切面中,从而降低耦合度,提高代码的可维护性。

具体到实现,我们创建了任务类(如SlayDragonQuestRescueDamselQuest)、骑士类(如BraveKnightRescueDamselKnight)和游吟诗人类(Minstrel),并使用Spring框架的依赖注入功能来装配这些组件。

在配置方式中,我们创建了一个名为spring-config.xml的Spring配置文件,它使用XML语法定义了AOP的切面、切点和通知。在注解方式中,我们创建了一个名为MinstrelAspect的切面类,使用AspectJ的注解来定义切点和通知,并通过SpringConfig类启用了对AspectJ的支持。

最后,我们编写了测试类TestKnight来验证AOP功能。测试类使用Spring的测试注解来初始化Spring应用上下文,并获取骑士对象以执行任务,从而展示了如何通过AOP在不修改业务逻辑代码的情况下,实现在特定行为前后添加额外操作的能力。

此外,还提到了为项目添加AOP相关依赖,包括Spring AOP、AspectJ运行时和AspectJ织入器。

整体而言,这段描述展示了AOP在Spring框架中的应用,以及如何通过配置方式和注解方式实现AOP,从而提高代码的模块化和可重用性。


http://www.mrgr.cn/p/72687414

相关文章

边缘计算的优势

边缘计算的优势 边缘计算是一种在数据生成地点附近处理数据的技术,而非传统的将数据发送到远端数据中心或云进行处理。这种计算模式对于需要快速响应的场景特别有效,以下详述了边缘计算的核心优势。 1. 降低延迟 边缘计算通过在数据源近处处理数据&…

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程: VMware 安装配置 Ubuntu(最新版、超详细)FinalShell 远程连接 Linux(Ubuntu)系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题:为什么使用 FinalShell 连接&#xff0…

鸿蒙HarmonyOS实战-ArkUI动画(页面转场动画)

🚀前言 页面转场动画是指在应用程序中,当用户导航到另一个页面时,使用动画效果来过渡页面之间的切换。这样做的目的是为了提升用户体验,使页面之间的切换更加平滑和有趣。 常见的页面转场动画包括淡入淡出、滑动、翻转、缩放等效果。通过使用这些动画效果,可以给用户一种…

背靠TON公链的Notcoin游戏项目,能否杀出GameFi的红海?

4月15日消息,Telegram生态中的游戏及Meme项目Notcoin,最近在X平台公布了令市场瞩目的代币经济学方案。据悉,NOT的总供应量高达1027亿枚,其中78%将分配给矿工和Voucher持有者,余下的22%预留给未来新用户、交易者及各类上…

java中是否所有的stream流都需要主动关闭

流的概念 在输出数据时,内存中的特定数据排成一个序列,依次输出到文件中,这个数据序列就像流水一样源源不断地“流”到文件中,因此该数据序列称为输出流。同样,把文件中的数据输入到内存中时,这个数据序列就像流水一样“流”到内存中,因此把该数据序列称为输入流。 输入…

【C++】---STL之list详解

【C】---STL之list详解 一、了解list的基本信息二、成员函数1、构造2、迭代器3、empty()4、size()5、front()6、back()7、push_front()8、pop_front()9、push_back()10、pop_back()11、insert()12、erase()13、swap()14、sort()15、reverse() 一、了解list的基本信息 1、库里面…

WAF防范原理

目录 一、什么是WAF 二、纵深安全防御 WAF的组网模式 WAF配置全景 WAF端 服务器 攻击端 拦截SQL注入,XSS攻击,木马文件上传 要求: 使用WAF,通过配置策略要求能防御常见的web漏洞攻击(要求至少能够防御SQL、XSS、文…

4.22日团队博客

今天进行了晨会 晨会成员:董茂欣、刘雪超、龚涵彬同时统计了昨天所做的内容,主要为登录和注册接口的书写和个人页面的制作

VScode如果展开空白的文件夹

1点击左下方小齿轮 2点击settings 3搜索框搜索compactFolders 4将Compact Folders勾上的复选框去掉

WPF开源轻便、快速的桌面启动器

前言 今天大姚给大家分享一款WPF开源、简单、轻便、快速的桌面启动器(支持多主题、多语言:简体中文、繁体中文、英文等):CurvaLauncher。 WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、…

.NET周刊【4月第2期 2024-04-21】

国内文章 他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk【Homekit.Net】1.0.0发布,快来打造你的私人智能家居吧 https://www.cnblogs.com/hezp/p/18142099 三合是一位不喜欢动态编程语言的开发者,对集成米家智能家居到苹果HomeKit的现有开源解决方案不满意。因为遇…

HASHCTF2024

Secret of Keyboard 签到脚本题,有些同学的脚本解出来大小写不正确可能是由于脚本无法识别shift+字母的组合键 首先使用tshark: tshark -r usb.pcap -T fields -e usb.capdata | sed /^\s*$/d > usbdata.txt 提取数据并删除空格 然后脚本一把梭出来:keyboard.py: normalK…

restful请求风格的增删改查-----修改and删除

一、修改&#xff08;和添加类似&#xff09; 前端&#xff1a; <script type"text/javascript">function update(){//创建user对象var user {id:$("#id").val(),username:$("#username").val(),password:$("#password").val…

网络中其他协议

目录 DNS协议 域名简介 ICMP协议 ICMP功能 ICMP协议格式 ping命令 NAT技术 NATP NAT技术的限制 代理服务器 DNS协议 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&#xff0c;是一个用来将域名转化为IP地址的应用层协议。 为什么有这个协…

Redis篇:缓存更新策略最佳实践

前景&#xff1a; 缓存更新是redis为了节约内存而设计出来的一个东西&#xff0c;主要是因为内存数据宝贵&#xff0c;当我们向redis插入太多数据&#xff0c;此时就可能会导致缓存中的数据过多&#xff0c;所以redis会对部分数据进行更新&#xff0c;或者把他叫为淘汰更合适&a…

报销管理的新篇章:凉鞋ERP软件的便利性

在当今商业环境中&#xff0c;报销管理是企业财务管理的重要组成部分。报销管理不仅涉及到员工费用的合理报销&#xff0c;还涉及到企业财务数据的准确性和合规性。顺通凉鞋ERP软件具备智能审批管理功能&#xff0c;能够降低报销审批过程中的风险。顺通凉鞋ERP软件还具备强大的…

Educational Codeforces Round 164 (Rated for Div. 2) A-E

A. Painting the Ribbon 暴力模拟即可 #include <bits/stdc.h>using namespace std; const int N 2e5 5; typedef long long ll; typedef pair<ll, ll> pll; typedef array<ll, 3> p3; // int mod 998244353; const int maxv 4e6 5; // #define endl &…

国密SSL证书在等保、关保、密评合规建设中的应用

在等保、关保、密评等合规建设中&#xff0c;网络和通信安全方面的建设是非常重要的部分&#xff0c;需要实现加密保护和安全认证&#xff0c;确保传输数据机密性、完整性以及通信主体可信认证。国密SSL证书应用于等保、关保和密评合规建设中&#xff0c;不仅能够提升网络信息系…

排序5-快速排序

排序5-快速排序快速排序(正序) 利用分而治之的思想+挖坑填数排序, 选择一个基准数, 将小于基准数的元素全部放在基准数左边, 大于基准数的元素全部放在基准数右侧.再对剩下的部分进行快速排序快速排序c++实现(正序) //快速排序(正序) void quickSort(int arr[], int start, int…

自己写的爬虫小案例

网址&#xff1a;aHR0cDovL2pzc2NqZ3B0Lmp4d3JkLmdvdi5jbi8/dXJsPS92aWV3L3dvcmtpbmdVbml0L3dvcmtpbmdVbml0Lmh0bWw 这串代码能够爬取勘察单位企业的详细信息。 import requests import time import csv f open(勘察单位公司信息.csv,w,encodingutf-8,newline) csv_writer …