首页 > 其他分享 >Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to ma

Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to ma

时间:2024-10-09 09:33:00浏览次数:8  
标签:available Set exposeProxy MyService invoked currentProxy AOP import AopContext

这个错误通常发生在使用 Spring AOP 时,尤其是当你尝试访问 AopContext.currentProxy(),但当前代理对象不可用时。下面是一些解决此问题的建议:

1. 启用 exposeProxy 属性

确保你的 AOP 配置中设置了 exposeProxy 属性为 true。这可以在使用注解或 XML 配置中进行设置

使用注解

如果你使用的是基于注解的配置,可以通过 @EnableAspectJAutoProxy 注解来启用 AOP,并设置 exposeProxytrue

import org.springframework.context.annotation.EnableAspectJAutoProxy;

@EnableAspectJAutoProxy(exposeProxy = true)
public class AppConfig {
    // 其他配置
}

使用 XML 配置

如果你使用 XML 配置,可以像这样设置:

<aop:aspectj-autoproxy expose-proxy="true"/>

2. 确保在同一线程中调用

确保你在同一线程中调用 AopContext.currentProxy()。如果你在不同的线程中进行调用,Spring 将无法找到当前的代理。你可以通过在 AOP 方法内部调用 AopContext.currentProxy() 来确保这一点。

例如:

import org.springframework.aop.framework.AopContext;

public class MyService {

    public void myMethod() {
        MyService proxy = (MyService) AopContext.currentProxy();
        // 使用代理对象进行其他操作
    }
}

3. 确保 AOP 代理类型

确保你的 AOP 代理类型正确。如果你使用 JDK 动态代理,确保接口被实现;如果使用 CGLIB 代理,确保你的类是非 final 的。当你需要在同一类的方法中调用其他方法时,CGLIB 会更有效。

4. 检查 Spring 版本

确保你使用的 Spring 版本支持 AOP 上下文。如果使用的版本较旧,建议升级到最新版本,以获得更好的支持和修复。

5. 其他调试方法

  • 检查你的 Bean 的作用域:确保你的 Bean 不是使用 prototype 范围,因为 AopContext 不会对 prototype Bean 提供支持。
  • 日志输出:增加日志输出,确保在调用 AopContext.currentProxy() 时,AOP 代理确实存在。

示例代码  (采用这个办法,加一个@EnableAspectJAutoProxy(exposeProxy = true) 注解是可以解决的)

以下是一个完整的示例代码:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.aop.framework.AopContext;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;

@EnableAspectJAutoProxy(exposeProxy = true)
@Component
public class MyService {

    public void myMethod() {
        MyService proxy = (MyService) AopContext.currentProxy();
        System.out.println("Using proxy: " + proxy);
        // 其他逻辑
    }
}

@Aspect
@Component
class MyAspect {

    @Before("execution(* MyService.myMethod(..))")
    public void beforeAdvice() {
        // 逻辑
    }
}

  确保你的 Spring 应用程序上下文配置正确后,再次运行应用程序,问题应该得到解决。

 

转自:chartGpt

 

标签:available,Set,exposeProxy,MyService,invoked,currentProxy,AOP,import,AopContext
From: https://www.cnblogs.com/wwssgg/p/18453574

相关文章

  • abc347E Set Add Query
    有数组A[N],初始时元素都为0,另外还有初始为空的集合S。依次处理以下Q组查询:给出整数x[i],如果S包含x[i],则从S中移除x[i],否则将x[i]加入S,记此时S的大小为|S|,把|S|加到集合中的每个元素i对应的A[i]中。求最终A[i]是多少。1<=N,Q<=2E5;1<=x[i]<=N分析:记录每个时刻集合S的大小,设元素u......
  • 练习题 - Scrapy爬虫框架 Settings 项目配置
    在使用Scrapy构建网络爬虫时,Settings框架配置是至关重要的部分。Settings是Scrapy框架的配置核心,它决定了爬虫的行为、请求的频率、用户代理的使用、数据存储等一系列关键功能。掌握Scrapy的配置设置,能够让你的爬虫更加高效、稳定和智能。通过合理配置,可以更好地模......
  • No instances available for XXX
     springcloud使用nacos作为服务发现,ribbon做负载均衡,然后报错,Noinstancesavailableforcloud-alibaba-study。版本  Springboot 2.6.7  Springcloud 2021.0.3  Springcloudalibaba2021.0.6.0过程  当我引入nacos包如下,2021.0.6.0包移除了ribbon,(除非......
  • STL-set
    STLset头文件set主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”即前者的元素不能重复,而后者可以包含若干个相等的元素set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同include声明#include<set>函数声明set<int>s;structrec{…};......
  • ​解密 Go runtime.SetFinalizer 的使用
    解密Goruntime.SetFinalizer的使用原创 GoOfficialBlog GoOfficialBlog  2024年10月05日18:45 中国香港 听全文如果我们想在对象GC之前释放一些资源,可以使用returns.SetFinalizer。这就像在函数返回前执行 defer 来释放资源一样。例如:1:使用runtime.......
  • ES6中扩展运算符...与Set结合使用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • [论文阅读报告] All pairs shortest paths using bridging sets and rectangular matr
    本篇文章介绍整数边权下\((\min,+)\)矩阵乘、APSP等问题的一些做法。若每个元素的权值在\([-M,M]\cap\mathbbZ\)中,\(n\timesn^r\)和\(n^r\timesn\)的\((\min,+)\)矩阵乘可做到\(\tildeO(Mn^{\omega(r)})\);有向图APSP可做到\(\tildeO(n^{2+\mu(t)})\),......
  • netsh winsock reset catalog 和 netsh int ip reset reset.log 是两个常用的 Windows
    netshwinsockresetcatalog和netshintipresetreset.log是两个常用的Windows命令,用于网络故障排除和恢复网络设置。下面是对这两个命令的详细解释:1. netshwinsockresetcatalog功能:重置Winsock目录,以修复与网络相关的问题。Winsock的作用:Winsock(WindowsSocke......
  • [lnsyoj2378/luoguAT_arc107_d]Number of Multisets
    题意给出两个正整数\(N,K\),求有多少有理数集满足以下所有条件集合有且只有\(N\)个元素,并且元素和为\(K\);每个元素须可表示为\( \frac{1}{2^{i}}\) $(i\inN)$.sol考虑dp,容易想到记\(f_{i,j}\)表示选\(i\)个数恰好和为\(j\)考虑到会出现诸如\(\dfrac{1}......
  • Centos7 停止维护之后 升级gcc||找不到devtoolset-8-gcc* 问题解决方案
    为了去小米澎湃互联组,感觉必须得拿下linux网络编程,今天第一步这个centos就给我拉了坨大的问题实质SCL源没换,相信你也在别的教程上看到要安装centos-release-scl吧?有坑!安装完成后在/etc/yum.repos.d目录下会出现CentOS-SCLo-scl.repo和CentOS-SCLo-scl-rh.repo两个文件,......