当在 bean 内部调用该方法时,Spring AOP 不起作用

2024-01-08

我的应用程序中编码了几个方面。除以下内容外,所有其他内容均有效。

服务接口

package com.enbiso.proj.estudo.system.service;
...
public interface MessageService {
     ...
     Message reply(Message message);
     Message send(Message message);
     ...
}

服务实施

package com.enbiso.proj.estudo.system.service.impl;
....
@Service("messageService")
public class MessageServiceImpl implements MessageService {
   ...
   @Override
   public Message reply(Message message) {
        ...
        return this.send(message);
   }

   @Override
   public Message send(Message message) {
         ...
   }
}

Aspect

@Aspect
@Component
public class NewMessageAspect {
    ...
    @AfterReturning(value = "execution(* com.enbiso.proj.estudo.system.service.impl.MessageServiceImpl.send(..))", 
                    returning = "message")
    public void perform(Message message){
       ...
    }
}

当我尝试执行send方法调试点在方面没有被击中perform.

UPDATE

我做了一些调查,发现这不起作用,当send方法是从调用reply方法如下

@Autowire MessageService messageService;
...
messageService.reply(message);

但是如果我调用该方法messageService.send(message)效果很好。但是由于reply方法在内部调用send方法,它不应该也调用aspect吗?

我不知道我做错了什么。请帮我。


谢谢jst为了清理事情。只是为了给未来的开发人员提供信息,我发布了这个问题的完整答案


Lets assume that there is a bean from SimplePojo
public class SimplePojo implements Pojo {
    public void foo() {
        this.bar();
    }
    public void bar() {
        ...
    }
}

当我们调用该方法时foo(),它重新调用该方法bar()在里面。甚至想到了方法foo()从 AOP 代理调用,内部调用bar()不属于 AOP 代理的范围。

所以最终这使得,如果该方法有任何建议的话bar()不被调用

Solution

Use AopContext.currentProxy()来调用该方法。不幸的是,这将逻辑与 AOP 耦合在一起。

public void foo() {
   ((Pojo) AopContext.currentProxy()).bar();
}

参考:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当在 bean 内部调用该方法时,Spring AOP 不起作用 的相关文章

  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • Java 小程序在 Mac 上闪烁

    这个问题很奇怪 问题并非在每个平台上都会发生 我在使用 MacOSX 的 Google Chrome 中出现了这种情况 但在 Safari 中却没有出现这种情况 对于使用 Windows 的朋友来说 在 Google Chrome 上运行得
  • JAXB 继承冲突 - 重新注释子类

    目前我的项目中有这样的环境 public abstract class Foo private List
  • 如何避免Eclipse在将类名放在注释中时导入类,以便checkstyle稍后不会抱怨?

    有时我将类名放在方法或类的注释中只是为了引用 但是 Eclipse 会自动执行导入并在文件中留下导入语句 这会导致稍后出现 未使用的导入 检查样式错误 当我在注释中输入类名时 是否可以更改一些配置以避免 Eclipse 自动导入 人们不同意
  • 使用 Jena 查询维基数据

    目前 Wikidata 有一个 SPARQL 端点 https query wikidata org https query wikidata org 我想使用 Jena 3 0 1 查询此网站 我使用以下代码 但收到错误消息 端点返回的
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • 是否可以手动检查 LocateRegistry 是否存在?

    I 已经发现 https stackoverflow com a 8338852 897090一种安全的方式获得LocateRegistry 即使注册表尚不存在 Registry registry null try registry Loc
  • 错误膨胀类 android.support.design.widget.NavigationView [启动时崩溃]

    该应用程序应该有一个导航抽屉 可以从左侧拉出并显示各种活动 但是一旦将导航栏添加到 XML Activity homescreen 文档中 应用程序一启动就会崩溃 主屏幕 java package com t99sdevelopment c
  • Java HashSet 是线程安全的只读吗?

    如果我通过 Collections unmodifyingSet 运行 HashSet 实例后 它是线程安全的吗 我问这个是因为 Set 文档声明它不是 但我只是执行读取操作 来自 Javadoc 请注意 此实现不是同步的 如果多个线程同时
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • Hibernate 标准接受 %% 值

    我正在使用下面的 Hibernate 代码来过滤workFlowName crt add Restrictions like workFlowName workFlow MatchMode ANYWHERE crt is the crite
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • Proguard 正在破坏我的清洁度。 Gson 和泛型

    我有一个从持久性加载信息的函数 我只是以一种非常简单的方式告诉它的类型 该类称为SharedPreferencesHelper kt所以它是一个真正的生活问题解决者 fun
  • 如何在 Spring Mvc 项目中设置上下文根

    我在 Tomcat 服务器中使用 Spring MVC 项目 每次运行应用程序时 服务器上下文根都会更改 如何设置固定上下文根 我的项目名称是 DemoApplication 首先部署此上下文根 路径是 http localhost 808
  • 为什么 java.util.Arraylist#clear 按照 OpenJDK 中的方式实现?

    http grepcode com file repository grepcode com java root jdk openjdk 6 b14 java util ArrayList java 473 http grepcode co
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐

  • 在 iOS 中获取设备位置(仅限国家/地区)

    我需要获取 iOS 设备的国家 地区位置 我一直在尝试将 CoreLocation 与 MKReverseGeocoder 一起使用 然而 这似乎经常返回错误 而且我只需要乡村 不需要街道之类的 如何才能以更稳定的方式做到这一点 NSStr
  • Python numpy 中的无循环卡方网格搜索

    最佳拟合线性参数 A 和 B y Ax b 对应于这些参数的卡方函数的最小值 我想对全局卡方最小值进行强力网格搜索 有保证 因为 2 参数线性卡方是抛物面 并通过 3 个嵌套循环 如下 实现了它 但希望避免循环 即向量化使用 Numpy 的
  • 如何使用 Azure Active Directory .NET SDK 删除 AppRoleAssignment?

    我正在尝试找出如何删除AppRoleAssignment来自使用 Azure Active Directory 图形 API 的组或用户 我正在使用 NET SDK Microsoft Azure ActiveDirectory Graph
  • 声明与类型不兼容

    头文件 ifndef H bankAccount define H bankAccount class bankAccount public string getAcctOwnersName const int getAcctNum con
  • AVCaptureSession 旋转 |视频传输时的方向

    我正在开发视频流应用程序 其中我需要捕获前置摄像头视频帧并编码然后传输到另一端 典型的流程是这样的 AVCaptureSession gt AVCaptureDeviceInput gt AVCaptureVideoDataOutput g
  • 如何取消或处置 WebBrowser 元素的当前导航

    我正在开发一个 C NET Framework 4 0 应用程序 它按顺序访问一些页面 有时我必须移至下一页而不等待上一页完成工作 如何取消之前的导航过程WebBrowser元素 WebBrowser元素使用 Internet Explor
  • 模拟器设备框架未显示

    我第一次在 MacBook 上安装 Android Studio 我按如下方式安装了第一个模拟器 但是当我打开设备时 我看不到设备框架 我需要做什么才能看到设备周围的框架 我使用的是 M2 MacBook 创建模拟器 没有设备框架的模拟器
  • 初始化使指针来自整数而不进行强制转换 - C

    很抱歉 如果这篇文章显得无知 但我对 C 还很陌生 所以我对它没有很好的理解 现在我正在尝试找出指针 我编写了这段代码来测试是否可以更改更改函数中 b 的值 并通过传入指针将其带回主函数 不返回 但是 我收到一条错误消息 Initializ
  • Docker 挂载发生在入口点执行之前或之后

    我正在构建一个 Docker 映像来运行基于 Spring Boot 的应用程序 我希望用户能够通过将包含 application properties 的文件夹安装到容器中来提供运行时属性文件 这是我的 Dockerfile FROM j
  • Mysql:重复键更新所有值?

    有没有简单的方法可以更新重复键后的所有值 例如 INSERT INTO published books SELECT FROM books WHERE book id book id ON DUPLICATE KEY UPDATE ever
  • 从超类访问 __DATA__

    我有一个名为 Response 的超类 package Response use strict use warnings use HTML Template sub response my class request return requ
  • 并行运行测试会导致 java 堆内存不足。

    并行运行测试会导致 java 堆内存不足 但是当我不并行运行它们时 不存在内存问题 这是错误 java lang OutOfMemoryError Java 堆空间 在 java util Arrays copyOf Arrays java
  • 使用 NGINX 添加 AWS 公共证书

    我正在使用 EC2 并使用 NGINX 由 PuTTY 提供 我选择了AWS 公共证书因此我明白要使用HTTPS我也需要配置 NGINX 我找到了一些关于它的教程 但是他们到处都添加了ssl certificate and ssl cert
  • 如何在 UICollectionViewController 中提供 GetSizeForItem 实现?

    UICollectionViewDelegateFlowLayout http developer apple com library ios documentation UIKit Reference UICollectionViewDe
  • 如何在渲染方法之外使用未声明的反应?

    我在我的项目中使用 usated 库 在渲染方法中 我使用set像这样 render return
  • WebGL 和 Tessellation 库?

    在 C C 中 OpenGL 有一个很好的库 用于将复杂的多边形形状细分为三角形条和扇形 该库是 GLUtesselator 是否有任何库具有与 WebGL HTML 等效的功能 GLUtesselator 已由 Google 地图的 Br
  • Git diff:忽略以单词开头的行

    据我所知here https stackoverflow com questions 53450186 git diff show only changes not matching a pattern 我们可以告诉git diff忽略以
  • 在弹出窗口中显示用户控件

    I have a button and another control placed in a usercontrol I want to pop out the control below the button to the topp o
  • 强制 C# 应用程序编译为 x64 而不是 AnyCpu

    我一直在尝试使用 C 2010 Express 在 C 应用程序中引用本机 x64 dll 我有一个从 2008 年项目转换而来的演示项目 其属性中有配置和平台选项 但我创建的新项目没有 下拉菜单根本不存在 事实上我什至无法从 调试 切换到
  • 当在 bean 内部调用该方法时,Spring AOP 不起作用

    我的应用程序中编码了几个方面 除以下内容外 所有其他内容均有效 服务接口 package com enbiso proj estudo system service public interface MessageService Messa