java - 使用 AspectJ 根据类型隔离具有相同名称的方法?
问题描述
假设我对该run()
方法有一个切入点。
pointcut run(): execution(public void *.run());
before(): run() {
// do something with run
}
但我只想捕捉一些运行实例。例如:
new Thread(new Runnable() {
@Override
public void run() {
// this run should be intercepted
}
});
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// this run should be ignored
}
}, 0, 1000);
如何更改我的切入点以忘记run()
不是来自线程的?
解决方案
如果您想建议该Runnable.run()
方法的所有实现,除非提供该 run 方法的实现的类是 的子类TimerTask
,可以使用以下切入点表达式有效地完成:
execution(public void Runnable+.run()) && !execution(public void java.util.TimerTask+.run());
推荐阅读
- java - 在 java 中生成 4 位字母数字序列的框架逻辑需要帮助
- linux - 如何在没有 Snap 的情况下创建 Linux 应用程序?
- php - 在 Laravel 中为 Excel 文件添加密码
- ios - 应用程序终止时运行代码。Xcode 12
- linux - chromeos 架子如何确定 linux 应用程序是否正在运行?
- linux - 使用 bash 查找文件的不同开头
- c - 在 tizen native 中使用网格布局时无法在两个屏幕之间导航
- json - 如何使用 WCF 获取 POST 请求的正文?
- php - 如何在 PHP 中使用 :: 作为我的变量中的字符
- java - Spring 应用程序在 200 个数据库连接时自行关闭