Java EE---Spring AOP

2023-11-07

本文是我在学习Java EE过程中记录学习的点点滴滴,仅仅为了学完之后巩固一下,日后忘记了也可以方便快速的复习。


前言

今天主要学习的是基于注解的AOP实现,由于基于XML的AOP实现需要在Spring文件中配置大量的代码信息,不利于代码的阅读和维护。为了解决这个问题,Spring AOP允许使用基于注解的方式实现AOP。


一、项目清单

在这里插入图片描述
使用的jar包:
在这里插入图片描述

二、全部代码

2.1、stuDao接口

package spring.aop.bean;

public interface StudentDao {
	public void addStudent();
	public void deleteStudent();
}

2.2、StudentDaoImpl类

package spring.aop.bean;

import org.springframework.stereotype.Repository;

@Repository("studentdao")
public class StudentDaoImpl implements StudentDao{
	public void addStudent() {
		System.out.println("模拟添加用户");
	};
	public void deleteStudent() {
		System.out.println("模拟删除用户");

	};
}

2.3、myAspect类

package spring.aop.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
//配置切面
@Aspect
public class myAspect {
	//配置切点
	@Pointcut("execution(* spring.aop.bean.*.*(..))")
	public void myPointCut() {}
	@Pointcut("execution(* spring.aop.bean.*.add*(..))")
	public void myPointCut1() {}
	@Pointcut("execution(* spring.aop.bean.*.delete*(..))")
	public void myPointCut2() {}
	
	//配置各项通知
	
	@Before("myPointCut(),")
	public void myBefore(JoinPoint joinPoint) {
		System.out.println("前置通知:模拟权限检查");
	}
	@After("myPointCut1()")
	public void myAfter(){
		System.out.println("后置通知:添加成功");
	}
	@After("myPointCut2()")
	public void myAfter1(){
		System.out.println("后置通知:删除成功");
	}
	@Around("myPointCut()")
	public Object myAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
		System.out.println("环绕开始:执行事务开始");
		//执行目标方法
		Object obj = proceedingJoinPoint.proceed();
		System.out.println("环绕结束:执行事务结束");
		return obj;

	}
	
}

2.4、test类

package spring.aop.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import spring.aop.bean.StudentDao;

public class test {
	public static void main(String [] args) {
		ApplicationContext context=new FileSystemXmlApplicationContext("src/applicationContext.xml");
		StudentDao dao=(StudentDao) context.getBean("studentdao");
		dao.addStudent();
		dao.deleteStudent();
	}
}

2.5、applicationContext.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/aop 
  http://www.springframework.org/schema/aop/spring-aop.xsd
  http://www.springframework.org/schema/context 
  http://www.springframework.org/schema/context/spring-context.xsd">
  <!--指定需要扫描的包,使注解生效  -->
    <context:component-scan base-package="spring.aop"></context:component-scan>
	<!-- 启动基于注解声明式AspectJ -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

三、结果

在这里插入图片描述

四、笔记

  • 以上代码主要是在两个方法add和del方法的前后添加前置通知、后置通知和环绕通知。
  • 以上Aspect的配置基本上都在myAspect类中使用注释配置完成了,xml文件中则只需要扫描相应的包让其注释生效就好了。
  • myAspect类中根据切面和切点的联系将切面中通知添加到切点的相应位置,有额外的更多要求可添加多个切点和多个切面,再根据需要去配置它们之间的联系将切面中的代码插入到切面中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java EE---Spring AOP 的相关文章

  • 简单 XML 框架:ElementMap 中的对象具有“类似内联”的行为

    我正在尝试在 Android 上序列化自定义对象的 Hashmap 以获得如下 xml
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • Hashset - 创建 Set 后使对象相同

    如果我们在 HashSet 中添加两个不同的对象 可变的 然后通过调用 setter 更改对象的值 使它们相同 则大小仍然是 hashSet 的 2 我无法理解其原因 public static void main String args
  • Java 小程序在 Mac 上闪烁

    这个问题很奇怪 问题并非在每个平台上都会发生 我在使用 MacOSX 的 Google Chrome 中出现了这种情况 但在 Safari 中却没有出现这种情况 对于使用 Windows 的朋友来说 在 Google Chrome 上运行得
  • JAXB 继承冲突 - 重新注释子类

    目前我的项目中有这样的环境 public abstract class Foo private List
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • Maven WebApp META-INF context.xml

    我正在使用 Maven 3 并且尝试在 webapp 文件夹下添加 META INF 文件夹 所以我正在尝试执行以下操作 src main webapp META INF context xml WEB INF 下面是我的 POM 文件
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • FileObserver 不适用于 Android 6.0 Marshmallow (API 23) 中的外部存储

    我有一个应用程序可以观察外部存储上的公共目录FileObserver 它运行良好Lollipop设备 我想添加对Marshmallow 所以我用它设置了一台 Nexus 9 平板电脑 在 Marshmallow 设备上 它失败 在 Loll
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • 如何自动转换十六进制代码以将其用作 Java 中的 byte[]?

    我这里有很多十六进制代码 我想将它们放入 Java 中 而不需要向每个实体附加 0x 喜欢 0102FFAB 和我必须执行以下操作 byte test 0x01 0x02 0xFF 0xAB 我有很多很长的十六进制代码 有什么办法可以自动做
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • ActiveMQ JNDI 查找问题

    尝试使用 JNDI 运行以下 ActiveMQ http activemq apache org jndi support html http ActiveMQ 20JNDI 并且我的 jboss server node lib 文件夹中有
  • Java HashSet 是线程安全的只读吗?

    如果我通过 Collections unmodifyingSet 运行 HashSet 实例后 它是线程安全的吗 我问这个是因为 Set 文档声明它不是 但我只是执行读取操作 来自 Javadoc 请注意 此实现不是同步的 如果多个线程同时
  • 接口是否像对象一样对待?

    为什么下面的代码可以工作 interface I class A implements I public String toString return in a class B extends A public String toStrin
  • 开发者环境-如何调用/消费其他微服务

    背景 我的环境 Java Play2 MySql 我在 Play2 gt S1 S2 S3 上编写了 3 个无状态 Restful 微服务 S1 消耗来自 S2 和 S3 的数据 因此 当用户点击 S1 时 该服务会异步调用 S2 S3 合
  • Proguard 正在破坏我的清洁度。 Gson 和泛型

    我有一个从持久性加载信息的函数 我只是以一种非常简单的方式告诉它的类型 该类称为SharedPreferencesHelper kt所以它是一个真正的生活问题解决者 fun
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • 我怎样才能限定我不“拥有”的自动装配设置器

    要点是 Spring Batch v2 测试框架具有JobLauncherTestUtils setJob与 Autowired注解 我们的测试套件有多个Job类提供者 由于这个类不是我可以修改的东西 我不确定如何限定它自动连接的作业 每个

随机推荐

  • 【FreeRTOS】队列的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • Mysql Partition 理论知识总结

    简述 本文内容主要 Giuseppe Maxia 曾在Mysql Conference Expo 2010发表关于
  • qt_共享库的使用

    在 Windows 中 MinGW 将输出 a 和 dll MSVC 将输出 lib 和 dll 在 Linux 中 MinGW 将输出 so so 1 so 1 0 和 so 1 0 0 lib 其中 a 和 so 是导入库 它们有助于将
  • STM32的CAN过滤

    文章目录 简介 相关寄存器 代码实例 只过滤一个CAN ID 过滤多个CAN ID 简介 STM32的CAN控制器可以对接收到的数据报文进行过滤 只接收指定CAN ID的数据 对于其他CAN ID发送过来的数据 则不再触发CAN中断 根据芯
  • 关于C语言的二分法

    1 二分法 二分法所属现代词 指的是数学领域的概念 经常用于j计算机中的查找过程中 2 基本思想 把函数f x 的零点所在的区间 a b 满足f a f b lt 0 一分为二 得到 a m 和 m b 根据 f a f m lt 0 是否
  • Harmony OS 开发指南——源码下载和编译

    本文介绍了如何下载鸿蒙系统源码 如何一次性配置可以编译三个目标平台 Hi3516 Hi3518和Hi3861 的编译环境 以及如何将源码编译为三个目标平台的二进制文件 坑点总结 下载源码基本上没有太多坑 可以很顺利的进行 编译源码主要的一个
  • PS CJ37/CJ38/CJ34 增加/返回/转借预算

    目录 CJ37增加预算 CJ38返回预算 CJ34转借预算 01 CJ37增加预算 1 补充预算 调用事务代码CJ37 输入要增加的WBS要素的预算 点击保存即可 2 代码示例 预算补充代码 调用函数 KBPP EXTERN UPDATE
  • 【目标检测】基于yolov7的海上船舶检测和识别(附代码和数据集,Windows系统)

    写在前面 首先感谢兄弟们的订阅 让我有创作的动力 在创作过程我会尽最大能力 保证作品的质量 如果有问题 可以私信我 让我们携手共进 共创辉煌 本次项目是在Windows系统上运行的 Ubuntu系统上运行请看专栏的另外一篇文章 文末附项目代
  • 精练排序算法

    排序算法 1 首先列举一些经典的案例 皆为python编写 1 a 33 24 45 16 77 for i in range 2 for j in range 4 i 1 if a j gt a i a j a i a i a j pri
  • 计算机网络应用层协议分析总结

    1 应用层协议原理 1 1 网络应用程序体系结构 C S结构 有一个总是打开的主机称为服务器 它服务于来自许多其他称为客户机的主机请求 客户机主机既可能有时打开 也可能总是打开 C S结构之下 客户机之间不直接通信 服务器有固定的IP地址
  • 常用的专业医学分析和科研绘图工具合集

    专业的医学分析和科研绘图在医学研究 临床实践和教育培训中起到重要的作用 可以提高医学专业人员的工作效率和决策质量 同时也促进医学科学的发展和进步 详细的资源及不停更地址 科研常用资源合集 Fiji ImageJ Fiji自动包含了各种有用的
  • 权重确定方法之主成分分析法

    什么是权重呢 所谓权重 是指某指标在整体评价中的相对重要程度 权重越大则该指标的重要性越高 对整体的影响就越高 权重要满足两个条件 每个指标的权重在0 1之间 所有指标的权重和为1 权重的确定方法有很多 这里我们学习用主成分分析确定权重 一
  • HTML的爱心闪烁代码

    没有web编译器 就先用txt的记事本写好 将后缀txt格式改为html格式 代码1如下
  • 软件开发文档模板

    目录 1 范围 2 总体要求 2 1 总体功能要求 2 2 软件开发平台要求 2 3 软件项目的开发实施过程管理要求 2 3 1 软件项目实施过程总体要求 2 3 2 软件项目实施变更要求 2 3 3 软件项目实施里程碑控制 3 软件开发
  • 基于MapperScan注解的Mybatis动态代理加载机制

    1 如下图在代码开发中使用mybatis时 通过一个接口UserDao对应的方法selectUserNameById执行xml里配置的selectUserNameById查询sql语句 接口dao没有具体的实现方法 那真正执行时mybati
  • 字典排序什么意思_字典序排序

    查字典时 比如查单词 Love 我们是从第一个字母L 开始查找 在A Z开头中的单词中 不管是实际操作的二分查找还是别的方式查找 总能找到L打头的单词所在的位置范围 然后又在这个范围内开始查找O字母排第二的单词 之后又依次检索V字母 E字母
  • DVWA更改不了安全等级,一直卡在一个等级

    关于DVWA更改不了安全等级 一直卡在一个等级 今天在DVWA平台做实验 出现了问题 换不到想要的安全等级 自己动手找找问题 他是通过传参数来确定等级的 那就用burpsuite抓一下看看 当你把这个安全等级删了再发出去 会发现到了high
  • Python创建优化方法

    1 很多小伙伴在python中创建方法时 写的代码很冗余 并且也没有很多的异常格式 今天撰写一个简单的优化方法 2 例如首先我们定义一个方法 里边获取URL的信息 在返回状态值的时候 我们需要进行判断 下面我来讲解一下这个方法的实现过程 首
  • 华为OD机试 - We Are A Team(Java)

    题目描述 总共有 n 个人在机房 每个人有一个标号 1 lt 标号 lt n 他们分成了多个团队 需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中 具体的 消息构成为 a b c 整数 a b 分别代表两个人的标号 整数 c 代
  • Java EE---Spring AOP

    本文是我在学习Java EE过程中记录学习的点点滴滴 仅仅为了学完之后巩固一下 日后忘记了也可以方便快速的复习 文章目录 前言 一 项目清单 二 全部代码 2 1 stuDao接口 2 2 StudentDaoImpl类 2 3 myAsp