为什么这个 Spring AOP 切入点没有被触发?

2023-12-23

我正在编写非常基本的基于模式的 Spring AOP,这是 .xml

<bean id="aoplistener" class="tao.zhang.Listener"/>

<aop:config>
  <aop:aspect ref="aoplistener">                
    <aop:pointcut id="whenCalled" expression="execution(* callme(..))" />
    <aop:after method="scream" pointcut-ref="whenCalled" /> 
  </aop:aspect>
</aop:config>

方法scream()在 tao.zhang.Listener 中只是打印出一些文本,并且应该在调用方法 callme() 时执行。

我有一个豆子叫logger它有方法 log() 和 callme()

public void log(){
    callme();
    System.out.println("Hello from logger ~~~~~~~~~~~~~~~~~~~");
}

public void callme(){
    System.out.println("I'm called");
}

注意 callme() 是由 log() 调用的

现在我有一个每 5 秒调用 log() 的调度程序:

<task:scheduler id="myScheduler" pool-size="10"/>

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="logger" method="log" fixed-rate="5000"/>
</task:scheduled-tasks>

奇怪的是,scream()没有被调用,但是如果直接调用callme():

<task:scheduler id="myScheduler" pool-size="10"/>

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="logger" method="callme" fixed-rate="5000"/>
</task:scheduled-tasks>

scream()被调用!

有什么建议么?在我看来,这个切入点与另一个方法中调用的方法不匹配......


Spring AOP仅在通过bean句柄进行调用时捕获方法调用(因为拦截器是通过使用代理对象来应用的),而不是在直接调用方法时捕获方法调用。

为了让你的代码工作,你需要切换到使用 AspectJ (它通过重写类的字节码来工作,这允许它拦截更多的东西并且更透明地这样做)或者改变你的调用方式callme()这样它是通过 bean 句柄:

SomeClass selfRef;

public void log(){
    selfRef.callme();
    System.out.println("Hello from logger ~~~~~~~~~~~~~~~~~~~");
}

public void callme(){
    System.out.println("I'm called");
}

您需要配置selfRef明确字段;它won't自动连线。

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

为什么这个 Spring AOP 切入点没有被触发? 的相关文章

  • Android CursorAdapter、ListView 和后台线程

    我一直在开发的这个应用程序有包含数兆字节数据的数据库可供筛选 许多活动只是列表视图 通过数据库中的各个级别的数据下降 直到到达 文档 即从数据库中提取并显示在手机上的 HTML 我遇到的问题是 其中一些活动需要能够通过捕获击键并重新运行带有
  • APNS(Apple 推送通知服务器)的反馈服务

    我们正在使用Java作为推送通知提供商APNS I我能够将消息发送到APNS但我不知道如何获得该消息的反馈 请帮忙 反馈服务具有类似于用于发送推送通知的接口的二进制接口 您可以通过以下方式访问生产反馈服务feedback push appl
  • Spring @Validated 在服务层

    Hej 我想使用 Validated group Foo class 在执行方法之前验证参数的注释 如下所示 public void doFoo Foo Validated groups Foo class foo 当我将此方法放入 Spr
  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • 为什么 @RunWith(SpringJUnit4ClassRunner.class) 不起作用?

    我正在尝试使用 Spring 框架使用 JUnit 测试 CRUD 方法 下面的代码完美运行 Transactional public class TestJdbcDaoImpl SuppressWarnings deprecation B
  • 如何添加 Java 正则表达式实现中缺少的功能?

    我是 Java 新手 作为一名 Net 开发人员 我非常习惯Regex Net 中的类 Java 实现Regex 正则表达式 还不错 但它缺少一些关键功能 我想为 Java 创建自己的帮助器类 但我想也许已经有一个可用的了 那么 是否有任何
  • 想要从java中的char数组创建字符流

    我想从 char 数组构造一个流以使用 java 8 功能 例如过滤器和映射 char list a c e Stream
  • AWS SDK 2 承担角色

    Bean public DynamoDbClient amazonDynamoDB final AssumeRoleRequest assumeRoleRequest AssumeRoleRequest builder roleSessio
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • java 中的 Try-with-resources 和 return 语句

    我想知道是否放一个return里面的声明尝试资源block 防止资源自动关闭 try Connection conn return conn createStatement execute 如果我写这样的东西将会联系被关闭 Oracle 文
  • Java:不使用 Arrays.sort() 对整数数组进行排序

    这是我们 Java 课程的练习之一中的说明 首先 我想说我 做了我的功课 我不仅仅是懒惰地请 Stack Overflow 上的人帮我回答这个问题 在所有其他练习中 这个特定项目一直是我的问题 因为我一直在努力寻找 完美的算法 编写JAVA
  • 如何构建和使用 TimeSeriesCollections

    我想在图表的 X 轴上显示一些日期 并且here https stackoverflow com questions 5118684 jfreechart histogram with dates据说我必须使用 TimeSeriesColl
  • Java8 项目上的 SonarQube 给出 jacoco-Exception

    我刚刚下载了最新版本 SonarQube 4 3 然后尝试使用以下命令构建 java 8 项目 mvn clean install mvn sonar sonar 这给了我下面的例外 谷歌搜索 我的印象是这是一个早期的问题 应该已经解决 h
  • 将 PropertyPlaceholderConfigurer 中的所有属性注入到 bean 中

    我有一个PropertyPlaceholderConfigurer加载多个属性文件 我想通过配置 XML 将合并的属性映射注入到 Spring Bean 中 我可以这样做以及如何做 您只需创建一个属性 bean 并将其用于您的Propert
  • 线程上下文类加载器和普通类加载器的区别

    线程的上下文类加载器和普通类加载器有什么区别 也就是说 如果Thread currentThread getContextClassLoader and getClass getClassLoader 返回不同的类加载器对象 将使用哪一个
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 乔达时间中两个日期之间的天数

    如何找到两次之间的天数差异乔达时间 http www joda org joda time DateTime http www joda org joda time apidocs org joda time DateTime html实例
  • 尝试使用 Spring 和扩展 Hibernate JpaRepository 的自定义 GenericDao 接口来使用 EhCache

    背景 这是我的工作 简化 GenericDao接口 由任何实现DomainDao 通用Dao java NoRepositoryBean public interface GenericDao
  • while循环只执行一次

    我很难弄清楚为什么 while 循环实际上不会循环 它运行一次并停止 import java util public class mileskm public static void main String args Scanner inp
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles

随机推荐

  • 即使文件存在,如何修复 QFile 打开错误(未知错误)?

    我正在尝试打开并阅读map dat文件使用QFile接口 但它不会打开该文件 即使它确实存在于目录中 我努力了fopen ifstream在 C 中 但他们一直告诉我该文件不存在 即使我已将其添加到资源文件夹中 qrc 然后我转向QFile
  • jquery图像幻灯片随机显示图像

    我正在使用链接中的幻灯片放映 http www alohatechsupport net webdesignmaui maui web site design easy jquery auto image rotator http www
  • 如何确定 seq2seq 张量流 RNN 训练模型的最大批量大小

    目前 我使用默认的 64 作为 seq2seq 张量流模型的批量大小 最大批量大小 层大小等是多少 我可以使用具有 12 GB RAM 的单个 Titan X GPU 和 Haswell E xeon 128GB RAM 输入数据被转换为嵌
  • 有什么方法可以将 Xcode 3 与 iOS SDK 4.3 一起使用吗?

    我正在使用 Xcode 4 和 iOS 4 3 Xcode 4 有很多 bug 更不用说很多东西都改变了 最让我烦恼的是热键 我什至找不到一种方法来以合适的组合自定义它们 我很想使用 Xcode 3 因为它很稳定并且可以满足我的需要 是否可
  • 在 Common Lisp 中,如何格式化浮点并指定分组、群聊和小数分隔符

    假设我有浮点数1234 9 我想将其格式化为1 234 90 是否有格式指令组合 D 可以处理分组和群聊 仅处理整数 F根本不处理分组 据我所知 没有人可以改变小数点 to 我看到的唯一解决方案是使用 D对于整数部分数字分组并将其与 和小数
  • 如何覆盖 celery 任务的后端

    我们使用 Redis 作为结果后端 然而 对于一项任务 我们希望覆盖它以使用 RabbitMQ 的文档任务后端 http celery readthedocs org en latest userguide tasks html Task
  • 在 Google 表格之间自动复制数据

    我正在寻找一些帮助来自动在谷歌表格之间复制数据 我有一张名为 当前数据 的表格 该工作表的 A F 列中包含数据 带标题 A 列包含用户名 B F 列将包含使用以下公式从 Instagram com 提取数据的公式 值 REGEXEXTRA
  • 如何在 Visual Studio 选项中禁用设计模式

    如何在没有 Visual Studio 的情况下仅使用 XAML Code Viewload设计模式 我每次都需要禁用设计模式 我在我的选项中找不到这个 source biggle de http www biggle de allView
  • UWP 应用程序是否需要 Windows 应用商店?

    如果是 我如何使用它来开发内部的东西 我不想在商店里看到它 它永远不应该在企业外部看到 编辑 侧载是唯一的方法吗 侧面加载并不是在 UWP 中运行应用程序的唯一方法 您还可以创建自己的安装程序 在 Visual Studio 中转到 项目
  • 将 div 浮动在右上角而不重叠同级标题

    有一个div and a h1在一个部分中 如何将 div 浮动在右上角而不与标题文本重叠 HTML 代码如下 section h1 some long long long long header a whole line 1 2 3 4
  • 数据表和服务器端处理 - 按需加载

    我已经使用 DataTables 构建了简单的表 并且成功连接了服务器端脚本以用数据填充我的表 在我的表格上方 有 2 个复选框和 2 个日期选择来指定过滤条件 当我的页面加载时 我会填充表格 因为在启动时数据表正在从服务器提取第一页数据
  • phpMyAdmin 配置在 Centos 6.5 上不起作用

    最近使用 yum 安装了 phpMyAdmin yum install phpmyadmin phpmyadmin 已安装到 usr share phpMyAdmin 但那里没有配置文件 有一个 config inc php 文件位于 et
  • 有没有办法将嵌套记录选择到表中?

    我在 Bigquery 中有一张表 T 其中包含简单字段和一个嵌套字段 我想有效地 select from T where 并将结果存储在新表 U 中 我希望 U 具有与 T 相同的架构 包括嵌套字段 有没有办法在 Bigquery 中执行
  • 定位 window.location.pathname

    我有一个类似于此的网址 www mysite com products 我用它来测试路径名 if products test window location gaq push trackPageview products landing 但
  • 更改 Google Cloud SQL 实例的 TCP 端口:3306

    如何更改 Google Cloud SQL 实例上的 TCP 端口 Google MySQL 服务器正在侦听端口 3306 这在我的环境中不起作用 端口号需要不同 我不知道如何在开发者控制台 云存储中更改此设置 我确实看到了文档网络和防火墙
  • C++ 成员变量的类型名

    是否可以获取成员变量的类型名 例如 struct C int value typedef typeof C value type something like that Thanks C 03 中没有 C 0x介绍decltype type
  • MapStruct:对象的映射列表,当对象由两个对象映射时

    假设我有这样的映射 Mapping source parentId target parent id Child map ChildDto dto Parent parent 现在我需要将 ChildDto 列表映射到 Child 列表 但
  • 从 BigQuery 导入到 R 时的特殊字符

    我有一个脚本用于废弃一些推文并将结果保存到 Google BigQuery 当我看到存储的数据时 像 这样的特殊字符会正确显示 但是当我尝试再次将数据导入 R 时 它们会被一些奇怪的字符替换 这是一个例子 Create df id twee
  • 如何在Word文档中插入Image对象作为图片

    所以我有这个函数来生成和返回我的图像 bmp 格式 我想把它放到一个word文档中 我在看InlineShapes AddPicture但只需要一个string参数 这要求我物理保存图片 然后将图片的路径作为参数提供给 AddPicture
  • 为什么这个 Spring AOP 切入点没有被触发?

    我正在编写非常基本的基于模式的 Spring AOP 这是 xml