spring aop失效场景

aop基于代理(jdk动态代理 / cglib代理)实现,即new了新的类实例,代理了原来的定义的类实例。

目录

    • 1. final修饰的方法无法被代理
    • 2. 静态方法无法被代理
    • 3. 内部方法调用,即this.method()无法被代理
    • 4. 私有方法不能代理
    • 5. 忘记加@EnableAspectJAutoProxy或@Aspect了也无法完成代理
    • 6. 不使用Spring的对象无法完成代理
    • 其它。。。

1. final修饰的方法无法被代理

当有如下aop的时候:

@Aspect
@Component
public class LogInterceptor {@After("execution(public * com.dq.service..*.func(..))")public void beforeFunc() {System.out.println("aop after func...");}}

如下测试
在这里插入图片描述
final修饰的func方法没有被代理,另外一个func方法正常代理

2. 静态方法无法被代理

public static void func(String a, String b) {String c = a + "|" +  b;System.out.println("func..." + c);
}

在这里插入图片描述
因为静态方法是属于类的,不属于对象实例

3. 内部方法调用,即this.method()无法被代理

public void func(int a, int b) {int c = a + b;System.out.println("func..." + c);}public void useFunc() {System.out.println("use func...");func(1,2);}

在这里插入图片描述

useFunc方法调用了可以被代理的func(int a, int b)方法,单独执行func(int a, int b)可以代理,但是内部this.func(int a, int b)这么调用用的是原来的实例,不是代理实例的,无法完成代理行为

4. 私有方法不能代理

这是显然的,私有方法一般是内部的一些逻辑转换方法,不对外使用

5. 忘记加@EnableAspectJAutoProxy或@Aspect了也无法完成代理

可能一切都是都是对的,但是没有加@Aspect

//@Aspect
@Component
public class LogInterceptor {@After("execution(public * com.dq.service..*.func(..))")public void beforeFunc() {System.out.println("aop after func...");}}

那显然无法代理

6. 不使用Spring的对象无法完成代理

如下,自己new的显然不行。必然是spring代理后的对象,显然要取那个代理bean
在这里插入图片描述

  1. 代理方法内部嵌套不会多次代理
@Component("testService")
public class TestService {public void func(String a, String b) {String c = a + "|" +  b;System.out.println("func..." + c);}public void func(int a, int b) {int c = a + b;System.out.println("func..." + c);func("a","b");}}

在这里插入图片描述

嵌套方法不会多次aop,符合预期

其它。。。

写的切面类是否有什么错误了

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

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

相关文章

Page Assist - 本地Deepseek模型 Web UI 的安装和使用

Page Assist Page Assist是一个开源的Chrome扩展程序,为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI,与自己的AI模型进行对话,获取智能辅助。这种设计不仅方便了用户随时调用AI的能力,还保护了…

GRN前沿:STGRNS:一种基于transformer的可解释方法,用于从单细胞转录组数据推断基因调控网络

1.论文原名:STGRNS: an interpretable transformer-based method for inferring gene regulatory networks from single-cell transcriptomic data 2.发表日期:2023.4.2 摘要: 动机:单细胞RNA测序(scRNA-seq&#xf…

vite共享配置之---css相关

vite和webpack都有对样式的处理,涉及到的有css、sass、scss、postcss、模块化,以下是vite和webpack对样式的处理方式 特性ViteWebpackCSS 处理方式自动处理,无需配置,使用浏览器的原生支持需要配置 style-loader 和 css-loader&a…

OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关

目标 学习将 OpenAI 接入 Web 应用,构建交互式 API 网关理解 Flask 框架的基本用法实现 GPT 模型的 API 集成并返回结果 内容与实操 一、环境准备 安装必要依赖: 打开终端或命令行,执行以下命令安装 Flask 和 OpenAI SDK: pip i…

深入浅出:旋转变位编码(RoPE)在现代大语言模型中的应用

在现代大语言模型(LLMs)中,位置编码是一个至关重要的组件。无论是 Meta 的 LLaMA 还是 Google 的 PaLM,这些模型都依赖于位置编码来捕捉序列中元素的顺序信息。而旋转变位编码(RoPE) 作为一种创新的位置编码…

MATLAB中matches函数用法

目录 语法 说明 示例 匹配文本 使用模式匹配十六进制数 匹配多个字符串 忽略大小写 matches函数的功能是确定模式是否与字符串匹配。 语法 TF matches(str,pat) TF matches(str,pat,IgnoreCasetrue) 说明 TF matches(str,pat) 会在指定模式与 str 有匹配时返回 1…

【信息系统项目管理师】第20章:高级项目管理 详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 20.1 项目集管理20.2 项目组合管理20.3 组织级项目管理20.4 量化项目管理20.5 项目管理实践模型本章是将第三版的第20章、第21章、第18章、第25章、第2章的PRINCE2进行了合并,包括项目集管理、项目组合管理、组…

个人笔记---关于详解threadlocal 上下文环境存储的最佳数据类型

个人原因很久没有写代码,对于一些基础的数据类型有一些忘记,可以根据gpt和我当时的问答进行复习 关于拦截器,由于在请求的到达controller处理器之前,拦截器(当然过滤器也可以实现,我感觉都差不多)就把上下文设置在了线程副本中,那么这个请求到处理器的这些代码进行查询出来的上…

vue3 的 onScopeDispose 是什么作用

onScopeDispose 是 Vue 3 中用于管理响应式副作用的一个重要 API,主要用于在当前活跃的 effect 作用域上注册一个处理回调函数。当这个作用域停止时,所注册的回调函数会被调用。这种机制使得开发者能够有效地清理和管理资源,尤其是在组合式函…

DeepSeek 部署过程中的问题

文章目录 DeepSeek 部署过程中的问题一、部署扩展:docker 部署 DS1.1 部署1.2 可视化 二、问题三、GPU 设置3.1 ollama GPU 的支持情况3.2 更新 GPU 驱动3.3 安装 cuda3.4 下载 cuDNN3.5 配置环境变量 四、测试 DeepSeek 部署过程中的问题 Windows 中 利用 ollama 来…

医疗信息分析与知识图谱系统设计方案

医疗信息分析与知识图谱系统设计方案 0. 系统需求 0.1 项目背景 本系统旨在通过整合医疗机构现有的信息系统数据,结合向量数据库、图数据库和开源AI模型,实现医疗数据的深度分析、疾病预测和医疗知识图谱构建,为医疗决策提供智能化支持。 …

QImage与AVFrame互转

未验证,仅供参考,此方法感觉不是很好 先是AVFrame转QImage #pragma execution_character_set("utf-8")static int decode_write_frame(AVCodecContext *avctx, AVFrame *frame, int *frame_count, AVPacket *pkt, int last) {int len, got_f…

基础算法——二维前缀和

二维前缀和 我们先前已经了解了前缀和思想,二维前缀和感觉上就是一维前缀和的进阶,下面 ,我们剖析一下两种前缀和。 一维前缀和 一维前缀和的核心就是这两个公式,二维前缀和也差不多的嘞 下面我们来推理一下二维前缀和 已知&a…

PySPARK带多组参数和标签的SparkSQL批量数据导出到S3的程序

设计一个基于多个带标签SparkSQL模板作为配置文件和多组参数的PySPARK代码程序,实现根据不同的输入参数自动批量地将数据导出为Parquet、CSV和Excel文件到S3上,标签和多个参数(以“_”分割)为组成导出数据文件名,文件已…

如何安装LangChain软件包

前言 LangChain是一个强大的框架,用于构建使用大型语言模型(LLMs)的应用程序。它提供了一系列软件包和工具,帮助开发人员将LLMs集成到他们的工作流程中。然而,由于其模块化设计,LangChain生态系统可能会让…

每日Attention学习19——Convolutional Multi-Focal Attention

每日Attention学习19——Convolutional Multi-Focal Attention 模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Convolutional Multi-Focal Atte…

2. K8S集群架构及主机准备

本次集群部署主机分布K8S集群主机配置主机静态IP设置主机名解析ipvs管理工具安装及模块加载主机系统升级主机间免密登录配置主机基础配置完后最好做个快照备份 2台负载均衡器 Haproxy高可用keepalived3台k8s master节点5台工作节点(至少2及以上)本次集群部署主机分布 K8S集群主…

游戏引擎学习第89天

回顾 由于一直没有渲染器,终于决定开始动手做一个渲染器,虽然开始时并不确定该如何进行,但一旦开始做,发现这其实是正确的决定。因此,接下来可能会花一到两周的时间来编写渲染器,甚至可能更长时间&#xf…

nuxt3中使用useFetch请求刷新不返回数据或返回html结构问题解决-完整nuxt3useFetchtch请求封装

前言 如果使用nuxt3写项目,可以查看nuxt3实战:完整的 nuxt3 vue3 项目创建与useFetch请求封装,此篇内容有详细步骤 但在此篇内容中useFetch请求在页面有多个请求的情况下,或者放在客户端渲染情境下是失败的,所以在此篇…

链式结构二叉树(递归暴力美学)

文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法: 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现,可以知道其底层结构…