Spring学习笔记(15)----使用Spring的注解方式实现AOP

下面介绍使用Spring框架进行AOP编程。

首先我们需要导入需要的jar包:

1.aspectjrt.jar

2.aspectjweaver.jar

3.cglib-nodep-2.1_3.jar

 

在spring中有两种方式实现面向切面编程,一种是基于XML配置,另一种是使用注解份额方式,在实际开放中我们可以任选其中的一种即可。

 

首先介绍下使用注解方式进行AOP开发。

要使用注解方式,我们需要打开注解处理器

<aop:aspectj-autoproxy/>

我们还是使用前面介绍的接口:

 

package com.szy.spring;

public interface UserManager
{

	public abstract void addUser(String username, String password);

	public abstract void deleteUser(int userId);

	public abstract String findUser(int userId);

	public abstract void modifyUser(int userId, String username, String password);

}

 

实现这个接口:

package com.szy.spring;

public class UserManagerImpl implements UserManager 
{

	public void addUser(String username, String password)
	{
		System.out.println("--------UserManagerImpl.addUser()----------");
	}

	public void deleteUser(int userId)
	{
		System.out.println("--------UserManagerImpl.deleteUser()----------");
	}

	public String findUser(int userId)
	{
		System.out.println("--------UserManagerImpl.findUser()----------");
		return null;
	}

	public void modifyUser(int userId, String username, String password)
	{
		System.out.println("--------UserManagerImpl.modifyUser()----------");
	}
}

 

下面我们定义一个切面类,由于我们使用的是注解方式,因此我们使用@Aspect来标识它是切面类。在切面类中我们要定义切入点,切入点是用来定义我们要拦截的方法。在切入点定义中使用了AOP表达式语言,下面通过实例简单解释一下:

 

@Pointcut("execution (* com.szy.spring..*.*(..))")
execution:代表执行
第一个*:代表返回值类型,使用*代表任何类型的返回值
com.szy.spring:代表包名
..:代表其底下的子包也进行拦截
第二个*:代表对哪个类进行拦截,*代表所有类
第三个*:代表方法
(..):代表方法的蚕食有无都可以

 

现在我们要对UserManagerImpl类下的所有方法进行拦截,则切入点如下表示:

@Pointcut("execution (* com.szy.spring.UserManagerImpl.*(..))")

private void anyMethod()  //定义切入点
 {
 }

 

其中切入点的名称是下面方法的名称aynMethod(),包括括号。

 

下面我们定义通知,通知分为前置通知、后置通知、意外通知、等。通知分为前置通知、后置通知、意外通知、最终通知和环绕通知等。

演示前置通知,

@Before("anyMethod()") //括号内为切入点名称
  public void doBefore()
  {
   System.out.println("----------------执行前置通知-----------------");
  }
 
  @AfterReturning("anyMethod()")
  public void doAfterReturning()
  {
   System.out.println("----------------执行后置通知-----------------");
  }
 @After("anyMethod()")
 public void doAfter()
 {
  System.out.println("----------------执行最终通知-----------------");
 }
 
  @AfterThrowing("anyMethod()")
  public void doAfterThrowing()
  {
   System.out.println("----------------执行意外通知-----------------");
  }
  
 @Around("anyMethod()")
 public Object doAround(ProceedingJoinPoint pjp) throws Throwable
 {
  System.out.println("----------------进入判断方法-----------------");
  Object result=pjp.proceed();  //该方法必须被执行
  System.out.println("----------------退出判断方法-----------------");
  return result;
 }

 

 我们把切面交给spring管理,要交给spring管理我们可以在配置文件同进行bean配置,或者使用扫描的方式。

<bean id="interceptor" class="com.szy.spring.Interceptor"/>

 下面我们进行测试

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserManager manager=(UserManager)context.getBean("userManager");
		manager.addUser("coolszy", "kuka");

 

按照我们的设计,输入的结果应为

----------------执行前置通知-----------------
----------------进入判断方法-----------------
--------UserManagerImpl.addUser()----------
----------------执行后置通知-----------------
----------------执行最终通知-----------------
----------------退出判断方法-----------------

Spring 自定义注解的实现与使用 *** 自定义权限校验接口* @author 亿先生* @date 2024年1月23日18:57:15*/修饰符访问修饰符必须为 public , 不写默认为pubic;关键字关键字为 @interface;注解名称注解名称为自定义注解的名称,例如上面的 XinLinLog 就是注解名称注解类型元素注解类型元素是注解中内容,根据需要标志参数,例如上面的注解的value; 阅读详情

相关推荐

Spring原理篇(15)--Spring AOP源码的实现<AOP终>

互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)[外链图片转存中…(img-reJHi59D-1712689384204)][外链图片转存中…(img-Aupvvnpp-1712689384205)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2301_82242204的博客 1045

【Java基础】学java注解,看这一篇文章就够了

注解是一种标记,使类或接口附加额外信息,帮助编译器和 JVM 完成一些特定功能。Annotation(注解)也被称为元数据(Metadata)是JDK1.5及以后版本引入的,用于修饰包、类、接口、字段、方法参数、局部变量等。如:常见的 @Override、@Deprecated和@SuppressWarnings其核心思想是java的ioc(inversion of control),也叫di(dependency injection,依赖注入),是一种面向对象编程中的设计模式。

fumeidonga的博客 2925

javav 基础

java特点:平台无关性,健壮性,简单性,面向对象,多线程,自动内存管理。 平台无关行:指java语言平台无关

编写高质量代码: 改善Java程序的151个建议 | 第六章 枚举和注解

我是 Rocky编程日记, 喜欢 后端源码 及 中间件架构, 该篇文章是我学习 编写高质量代码: 改善Java程序的151个建议的笔记记录。希望我写的笔记能够给你提供帮助。同时若笔记中存在不对的地方,那一定是当时的理解还不够, 希望你能够及时指出嗷~

qq_42605751的博客 638

qupath再度更新:使用WSInfer进行深度学习

我们在下面提供了一个示例,说明如何使用 WSInfer 创建 WSI 中肿瘤和肿瘤浸润淋巴细胞 (TIL) 的空间图谱,这些图谱被认为在几种癌症中既有预后又有预测意义6,10,11,12.由于 WSI 非常大,因此它们通常被分解为补丁,以使分析变得可行。补丁分类的输出通常是空间分类地图,通常可以跨 WSI 集成,以创建表示该幻灯片的诊断、预测或“分数”的单个输出。在当前的实施中,我们专注于斑块分类的通用任务,该任务广泛用于广泛的病理学应用,具有促进诊断、预后或预测功能的深度学习模型。

hx2024的博客 2200

五段式S型算法笔记

又因为有 v-v0= 0.5jt通式: 所以有 vm-v0= 0.5jtm 所以有4vm-4v0= 2jtm。算法1: v=2vm-v0-0.5*jt+2jt*tm-2jtm*tm。加加速度j 自己设置 已知,vmax自己设置已知;所以有4vm-4v0= 2jtm带入算法1。

qq_36658033的博客 681

Spring --13.Spring中AOP编程(注解方式)

1、基于注解AOP入门案例 1.2、创建工程引入依赖 pom.xml &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-context&lt;/a...

一叶知秋 540

ShardingSphere-JDBC 关键字问题

这里得到的提示就是,假设一个老库一堆表,只对个别表进行分表。引入sharding后虽然指定了分表的bindingTables,其余的走default-data-source就是默认不分表的。但是sharding会接管数据源,老表用默认的mybatis正常,sharding可能会报错。preciseAlgorithmClassName对应的是类名,注意yaml的缩进。这不是常见的没有配置sharding数据源导致empty的错误。使用sharding的时候,遇到了两个问题。...

bohu83的博客 4996

spring AOP注解@Aspect的使用以及spring注解失效的场景

AOP思想: AOP(Aspect Oriented Programming)是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理、增..

weixin_38860401的博客 3万+

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

【对比学习+分割】CRIS:CLIP驱动RIS图像分割(CVPR 2022)

CRIS: CLIP-Driven Referring Image Segmentation

这个博客太懒了什么都没说 3325

使用Spring的AOP优雅的进行参数校验【三种方式】

参数校验的三种方式,自定义AOP拦截完成嵌套对象的字段校验

探索科技 脚踏实地 5367

晶圆测试(Wafer Sort)的核心技术与良率提升策略

晶圆测试(Wafer Sort)是芯片制造中的关键“入学考试”,通过探针台与自动测试设备(ATE)对晶圆上的芯片进行功能与参数测试,筛选不合格芯片以控制成本。本文深入解析了其核心技术,包括自动化视觉系统对准、测试流程优化策略,并探讨如何利用测试数据驱动良率提升,展望了DFT与AI智能测试的未来趋势。

e4f5g6h的博客 519

spring揭秘10-aop04-基于AspectJ类库注解织入横切逻辑

本文总结自《spring揭秘》,作者王福强,非常棒的一本书,墙裂推荐;1)概述:@AspectJ代表一种定义Aspect切面的风格,让我们能够以POJO形式定义Aspect,没有其他接口定义限制; 唯一需要的是使用相应的注解标注这些Aspect定义的POJO类; spring aop会根据注解扫描出Aspect类,然后织入横切逻辑;1)通过AspectJ类库注解重构切面(方法执行耗时统计):【ManNoItfCallTaskAspectjAnnotationMain】基于AspectJ注解织入横切逻辑测试m

PacosonSWJTU的博客 1165

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1542

爬虫不宕机!2026自愈式爬虫开发(Python+AI自动应对页面改版)

传统爬虫最大的痛点是"页面一改就宕机":前端布局调整、CSS选择器失效、数据结构变化,都会导致爬虫瘫痪,需要人工逐行修改代码。2026年,基于AI的自愈式爬虫成为行业标配:通过大模型自动识别页面结构变化、适配新的元素定位规则、修复数据提取逻辑,实现"页面改版不宕机,AI自动自愈"的企业级效果。本文从零讲解如何用Python+AI构建自愈式爬虫,聚焦页面改版自适应、故障自动修复、规则动态更新三大核心能力,附带可直接落地的生产级代码。问题场景解决方案LLM生成规则格式错误。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1215

16-Spring 基于注解的AOP编程、AOP总结

上一篇:15-Spring AOP的底层实现原理JDKProxy&CGLIB https://blog.youkuaiyun.com/fsjwin/article/details/109481104 前面我们介绍的aop编程完全可以满足项目的需要,但是有没有更为简便的方式呢? 当然有了,就是aspectJ为我们提供的大餐,使用注解的aop编程 下面就开启我们的大仓之旅 值得注意的是不管是aop的注解编程,还是在xml中就行配置,他们的主要矛盾是一样的,矛盾的主要方面也是一样的。即 目标对象 增强功能 切入点

前路无畏的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring常用注解(绝对经典)

Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!

学Java,找哪吒 18万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Boot AOP 切面注解

AOP,即面向切面编程,是一种编程范式,旨在处理程序中那些分散在各处的“横切关注点”。横切关注点通常是那些贯穿多个模块的功能,比如日志记录、性能监控、事务管理、安全检查等。AOP 的核心思想是通过“切面”将这些关注点与业务逻辑分离,使得代码更为简洁且易于维护。在 Spring 中,AOP 是通过动态代理实现的。Spring 使用 AOP 来在运行时动态织入一些逻辑,如方法执行前后插入代码、捕获异常等,而无需改变原始的业务代码。自定义注解是 Java 提供的一种灵活机制,用于创建可自定义的元数据。

lenyan~的博客 1895

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring家族框架——Spring15——AOP

🔥本篇概览:详细讲解了Spring的AOP三种实现方式——API、自己写diy、注解实现🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 969

Spring AOP注解方式

intellij IDE 编译环境 :简单的Spring aop注解的方式开发案例 1.创建项目 2.lib里的jar包: !aopalliance-1.0.jar aspectjweaver-1.8.9.jar com.springsource.org.apache.log4j-1.2.15.jar spring-aop-4.3.18.RELEASE.jar spring-aspects-4.3...

weixin_44213764的博客 234

Spring AOP学习笔记

AOP的全称是Aspect Oriented Programming,即面向切面编程。和OOP不同,AOP主张将程序中相同的业务逻辑进行横向隔离,并将重复的业务逻辑抽取到一个独立的模块中,以达到提高程序可重用性和开发效率的目的。在传统的业务处理代码中,通常都会进行事务处理、日志记录等操作。虽然使用OOP可以通过组合或者继承的方式来达到代码的重用,但如果要实现某个功能(如日志记录),同样的代码仍然会分散到各个方法中。未使用AOP的面向切面编程案例。

小吴 1119

Spring-基于注解和XML混合方式的使用 2021-09-15

Spring的基础和应用 Spring 基础 1.1 XML使用-IoC配置与依赖(DI)配置 1.2 基于注解和XML混合方式的使用 1.3 基于纯注解方式的使用 1.4 AOP 介绍 1.5 基于AspectJ的AOP使用 组件支持 2.1 整合Junit 2.2 事务支持 基于注解和XML混合方式的使用Spring的基础和应用Spring 基础组件支持一、使用方法1.1 配置context:component-scan标签1.2 类上面加上注解@Component二、常用注解2.1 IoC 注解 (创

qq_21438267的博客 1462

基于自定义注解与 Spring AOP 的通用日志记录实现

在软件开发中,针对用户操作日志的记录是一个普遍且重要的需求,旨在跟踪用户行为、保障系统安全及进行后续的问题追踪与性能分析。传统上,若在每次方法调用时都手动构造日志实体并同步插入数据库,不仅会导致代码冗余且难以维护,还会因同步操作而拖慢系统性能。为了优化这一流程, 可以使用自定义注解和aop的方式进行对日志的记录, 能动态记录指定记录的参数, 如请求参数, 响应参数, 操作时间, 操作用户的用户名, 方法耗时等等, 可以灵活拓展,而无需在每个业务逻辑点中显式编写日志代码。

天天的博客 1736
上一篇: Spring学习笔记(14)----使用CGLIB实现AOP功能
下一篇: Spring学习笔记(16)----使用Spring配置文件实现AOP
coolszy
博客等级 码龄19年 2659粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值