当前位置: 首页 > article >正文

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.kler.cn/a/535844.html

相关文章:

  • 通信易懂唠唠SOME/IP——SOME/IP-SD服务发现阶段和应答行为
  • 蓝桥杯嵌入式备赛(三)—— LED +按键 + LCD
  • 嵌入式八股文面试题(一)C语言部分
  • 2025.2.6
  • 【Linux】24.进程间通信(3)
  • 【戒抖音系列】短视频戒除-1-对推荐算法进行干扰
  • 本地化部署 AI 的第一步,认识和使用 ollama
  • 【DeepSeek青桔系列】Ollama 部署 DeepSeek:AI 界的“拼多多”!
  • leetcode——只出现一次的数字(java)
  • 阿里云与腾讯云 DDoS 防御价格大比拼
  • vue组件和插件的区别与联系
  • 【前端】【面试】【经典一道题】前端 Vue、React 采用单向数据流的原因
  • 基于离散浣熊优化算法(Discrete Coati Optimization Algorithm,DCOA)的骑手配送路径规划研究,MATLAB代码
  • Java 面试之结束问答
  • .net知识点4
  • 【Linux】冯诺依曼体系结构和操作系统概念理解
  • 如果$nextTick内部抛出错误,如何处理?
  • 发布:大彩科技DB系列1.6寸圆形UI串口屏发布!
  • 树莓派卷积神经网络实战车牌检测与识别
  • Linux 内核源码can相关配置项
  • 每日Attention学习21——Cascade Multi-Receptive Fields
  • 华为od 勾股数元组
  • 如何在 FastAPI 中使用本地资源自定义 Swagger UI
  • ElasticSearch 学习课程入门(二)
  • 【2024华为OD-E卷-100分-箱子之字形摆放】((题目+思路+JavaC++Python解析)
  • maxun爬虫机器人介绍与部署