iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring this调用当前类方法无法拦截的代码怎么写
  • 586
分享到

Spring this调用当前类方法无法拦截的代码怎么写

2023-06-29 13:06:10 586人浏览 泡泡鱼
摘要

这篇文章主要介绍“spring this调用当前类方法无法拦截的代码怎么写”,在日常操作中,相信很多人在Spring this调用当前类方法无法拦截的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法

这篇文章主要介绍“spring this调用当前类方法无法拦截的代码怎么写”,在日常操作中,相信很多人在Spring this调用当前类方法无法拦截的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring this调用当前类方法无法拦截的代码怎么写”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

先给出代码示例

package com.example.demo.service;import org.springframework.stereotype.Service;@Servicepublic class ProxyService {    public void  testA(){        System.out.println("进入A");        this.testB();    }    public void testB() {        System.out.println("进入b");    }}
package com.example.demo.annotation;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.springframework.stereotype.Component;@Aspect@Componentpublic class AspectjTest {    @Around("execution(* com.example.demo.service.ProxyService.testB())")    public void recordProxy(ProceedingJoinPoint joinPoint) throws Throwable {        long start = System.currentTimeMillis();        joinPoint.proceed();        long end = System.currentTimeMillis();        System.out.println("花费时间:"+(end-start));    }}
package com.example.demo.api;import com.example.demo.service.ProxyService;import com.example.demo.service.UserService;import org.springframework.aop.framework.AopContext;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Controller;import org.springframework.WEB.bind.annotation.PostMapping;@Controllerpublic class ProxyApi {//    @Autowired//    ProxyService proxyService1;    @Autowired    private ApplicationContext applicationContext;    @PostMapping("/proxy")    public String test1() {        ProxyService proxyService1 =  applicationContext.getBean(ProxyService.class);;        proxyService1.testA();        return "string";    }}

运行上面的代码会发现 配置aop 拦截方法不会被执行

Spring this调用当前类方法无法拦截的代码怎么写

我们通过debug 查看这个proxyService1 和this的区别,看看他们的值是什么

Spring this调用当前类方法无法拦截的代码怎么写

Spring this调用当前类方法无法拦截的代码怎么写

发现不一样,其实这就是问题的原因。

当我们在aop配置拦截的时候会指定类下面的方法路径,在spring启动的时候会先去加载这个ProxyService类,生成一个bean,但是因为你用aop配置了,所以需要代理这个ProxyService类,所以最终存在spring容器中的bean对象就是被代理后的bean对象。所以,我们在用容器获取bean或者用依赖注入获取bean的地址路径显示的是被代理后的bean 。
2、this获取的当前对象方法的一个引用,所以在调用testB方法的时候用的不是被代理的对象,自热不会经过aop拦截,原理和我们使用普通动态代理一样,只能是代理对象才能走自定义的方法。
3、可以通过debug 查看当ProxyService类被代理前和后的zhi值

Spring this调用当前类方法无法拦截的代码怎么写

Spring this调用当前类方法无法拦截的代码怎么写

发现是和之前的debug截图里面的值相符合的哈。

解决方法,就是在调用testB方法的时候用spring容器里的bean对象

@Servicepublic class ProxyService {    @Autowired    private  ProxyService proxyService;        public void  testA(){        System.out.println("进入A");        proxyService.testB();    }    public void testB() {        System.out.println("进入b");}

或者

@Servicepublic class ProxyService {    public void  testA(){        System.out.println("进入A");        ProxyService currentProxy = (ProxyService) AopContext.currentProxy();        currentProxy.testB();    }    public void testB() {        System.out.println("进入b");    }}

最终结果正确

Spring this调用当前类方法无法拦截的代码怎么写

到此,关于“Spring this调用当前类方法无法拦截的代码怎么写”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Spring this调用当前类方法无法拦截的代码怎么写

本文链接: https://www.lsjlt.com/news/325228.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring this调用当前类方法无法拦截的代码怎么写
    这篇文章主要介绍“Spring this调用当前类方法无法拦截的代码怎么写”,在日常操作中,相信很多人在Spring this调用当前类方法无法拦截的代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-29
  • Spring this调用当前类方法无法拦截的示例代码
    先给出代码示例 package com.example.demo.service; import org.springframework.stereotype.Service; @S...
    99+
    2024-04-02
  • 怎么解决Spring AOP拦截抽象类父类中方法失效问题
    这篇文章主要介绍怎么解决Spring AOP拦截抽象类父类中方法失效问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景最近工作中需要对组内各个系统依赖的第三方接口进行监控报警,对于下游出现问题的接口能够...
    99+
    2023-06-21
  • 解决spring AOP中自身方法调用无法应用代理的问题
    目录spring AOP中自身方法调用无法应用代理如下例可以使用如下两种方式修改代码以应用事务(1)在MyServiceImpl中声明一个MyService对象(2)使用AopCon...
    99+
    2024-04-02
  • php怎么调用类的方法
    这篇文章主要讲解了“php怎么调用类的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php怎么调用类的方法”吧!1. 定义类在 PHP 中,首先需要定义类,类是一个包含属性和方法的模板,...
    99+
    2023-07-05
  • python实例方法使用代码怎么写
    这篇文章主要介绍“python实例方法使用代码怎么写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python实例方法使用代码怎么写”文章能帮助大家解决问题。实例方法是从属于实例对象的方法,定义实例...
    99+
    2023-07-04
  • C调用C++代码的方法是什么
    这篇文章主要介绍“C调用C++代码的方法是什么”,在日常操作中,相信很多人在C调用C++代码的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C调用C++代码的方法是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-25
  • c#怎么调用类中的方法
    在 c# 中调用类中的方法,需要先创建类的实例,然后使用实例名称和点运算符访问方法。步骤包括:1. 使用 new 关键字创建类的实例;2. 使用实例名称和点运算符访问方法。 如何在 C...
    99+
    2024-05-12
    c#
  • .Net Framework ping方法的实现代码怎么写
    本篇文章为大家展示了.Net Framework ping方法的实现代码怎么写,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。开发人员在使用.Net Framework进行开发的时候,会深深的体会到其...
    99+
    2023-06-17
  • flex调用java类的方法 flex怎么用
    要在Flex中调用Java类的方法,你需要使用Flex的远程调用功能。以下是使用Flex调用Java类方法的步骤:1. 创建Java...
    99+
    2023-08-24
    Java
  • Spring main方法中怎么调用Dao层和Service层的方法
    本篇内容介绍了“Spring main方法中怎么调用Dao层和Service层的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2023-06-21
  • python怎么调用其他类中的方法
    在Python中,要调用其他类中的方法,需要先创建该类的对象,然后通过对象来调用方法。以下是一个简单的示例:```pythoncla...
    99+
    2023-10-11
    python
  • Java怎么调用其他类中的方法
    在Java中,要调用其他类中的方法,首先需要创建一个该类的对象,然后通过对象来调用方法。以下是一个示例代码:```javapubli...
    99+
    2023-08-15
    Java
  • c#怎么调用另一个类的方法
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • 八个无需编写代码即可使用 Python 内置库的方法
    近几年 Python 语言之所以流行,是因为我们可以使用它编写更少的代码来实现复杂的功能。Python 开发者社区非常欢迎那些封装了复杂实现但是对使用者十分友好的工具包。然而,Python 的简便性不止如此。你能相信我们可以在不写任何代码的...
    99+
    2023-05-14
    代码 Python 内置库
  • php无法在外部静态调用类和方法的原因是什么
    这篇文章主要讲解了“php无法在外部静态调用类和方法的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php无法在外部静态调用类和方法的原因是什么”吧!什么是静态调用?在PHP开发中...
    99+
    2023-07-05
  • javascript中自定义函数方法的代码怎么写
    这篇文章主要介绍了javascript中自定义函数方法的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript中自定义函数方法的代码怎么写文章都会有所收获...
    99+
    2024-04-02
  • 无需编写代码即可使用Python内置库的方法有哪些
    本篇内容主要讲解“无需编写代码即可使用Python内置库的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“无需编写代码即可使用Python内置库的方法有哪些”吧!1. Python CL...
    99+
    2023-07-06
  • oracle中出现ORA-01940:无法删除当前已连接的用户怎么办
    这篇文章主要为大家展示了“oracle中出现ORA-01940:无法删除当前已连接的用户怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“oracle中出现O...
    99+
    2024-04-02
  • c#怎么调用另一个类里面的方法
    在 c# 中,要调用另一个类中的方法,需要:创建另一个类,包含要调用的方法;在使用该方法的类中实例化另一个类;使用实例化后的另一个类的变量来调用其方法。 如何用 C# 调用另一个类中的...
    99+
    2024-05-12
    c#
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作