问题标签 [pointcut]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
34208 浏览

spring - 如何为多个包指定单个切入点

我正在使用 Aspect 在基于 spring mvc 的应用程序中记录活动。我正在使用@controller注释来定义我的应用程序中的任何控制器。我在两个不同的包中有两个不同的控制器说

  • com.package1 包含控制器 1 类,我们将其命名为 AController
  • com.package2 包含控制器 2 类,我们将其命名为 BController

我可以通过使用将方面应用于一个特定的控制器包

我的问题是如何在表达式(* package1. . . (..))**中指定多个不同的包。

现在,我为每个包声明一个单独的切入点,aop:beforeaop:after为每个切入点声明一个单独的入口。但我认为这应该是定义多个包切入点的理想方式。

0 投票
3 回答
1074 浏览

multithreading - 如何为同一类中的另一个方法调用的方法运行方面建议

我对 Spring AOP 很不满意。我正在尝试使用方面触发一个方法,但是将触发方面的方法也是同一个类的方法并且方面不起作用(顺便说一句没有错误)。像这样

任何想法将不胜感激

谢谢

0 投票
1 回答
522 浏览

java - Spring AOP 切入点不适用于抽象方法

我有以下切入点:

以及以下抽象类:

我的切入点仅在我调用 Poller.toString() 时适用,而不是 Poller.doPoll()。我希望它适用于在 Poller 类或其子类中采用任意数量参数的任何方法。为什么不是这样?

0 投票
1 回答
1723 浏览

spring - 指向 Spring @RequestMapping 的切入点

我现在正试图在我的 Spring 项目上启用 AOP。我想在@RequestMapping 完成后执行代码(会话清理)。这是我的applicationContext.xml(只需加载引用的资源

安全上下文:

我的服务上下文:

我的网络上下文:(由于简短而省略了 Bean 定义!!)

这是方面类的接口

实现很简单 @Before("pc()") public void print(){ System.out.println("About to make call to print Hello World" }

我还尝试了其他一些表达方式,例如:

  • @Pointcut("执行(@org.springframework.web.bind.annotation.RequestMapping public * appname.*(..))")
  • 和许多其他人

没有运气。我开始认为问题不在于表达式(我已经尝试了大约 10-15 种类型……),而是上下文中没有考虑到的类。

对于答案,请考虑:

  • 例如,名称 appname 显然是
  • 插入 aop:config 和 aop:aspectj-autoproxy 只是一个尝试,因为我还在其他线程中读到,必须在 applicationContext 加载的每个文件中启用配置。我也试过只插入一个但没有结果
  • 控制器具有带注释的接口+带注释的实现。我也尝试过不注释界面或完全删除而没有结果

有什么帮助吗?:)

编辑:作为对 axtavt 的回应 .. 对不起,我忘了添加我的 web.xml,这是其中的一部分

我通过 web-context.xml 文件正确加载了 contextConfigLocation。抱歉我忘记了:-(

EDIT2:我在axtavt的建议下得到了错误的答案!谢谢!

0 投票
5 回答
17278 浏览

spring - 注释参数的 Spring AOP 切入点

假设我有这样的方法:

是否有一个切入点表达式可以选择所有带有@CustomAnnotation 注释的参数的方法?如果是这样,有没有办法可以访问“价值”参数?

0 投票
0 回答
188 浏览

aop - 如何将 context(ApplicationContext) 作为参数传递给 logBefore Method(Method of Aspect)?

我想实现一个方面来避免延迟加载问题。那么如何将上下文(应用程序上下文)作为 logBefore 方法的参数传递?什么是签名切入点定义了上面的方法(我制作“???”的地方),知道这个方法(logBefore)将在所有具有“Set”作为结果类型和“slm. aoa.buisiness.facade”作为包

并感谢您的帮助。

0 投票
2 回答
2333 浏览

java - 切入点与继承混淆

我对编写一个匹配方法的所有执行的切入点感到困惑。我尝试了应该匹配类的所有方法执行的切入点Alpha

具有以下类层次结构

如果 Main-program 调用alphaMethod-instanceBeta我的建议会像预期的那样被调用,但是在我的建议内部调用的 Main-program 调用betaMethod不会alphaMethod被调用,我不明白为什么。

方面定义

主要方法

0 投票
0 回答
2830 浏览

java - 类的所有方法的切入点,包括继承的方法

我正在玩 aop 和 aspectj 并发现了一个(对我来说)意想不到的行为。

aspectj-docs中,我找到了以下示例切入点:

对于以下类定义(我稍微更改了原始示例):

该示例的描述指出:

[切入点] 为返回 void 且没有在 Middle 中声明或继承的参数的公共方法挑选所有方法执行,即使这些方法在 Middle 的子类中被覆盖。

这个例子对我来说工作得很好,但是如果 classSub没有覆盖,则不会拦截从外部到on a -instancem()的方法调用。这不违反文档吗?mSub

在继承类中遇到了另一个问题,这是由使用代理引起的。但在这种情况下,使用代理不会导致这种行为,因为代理应该为所有代理类提供方法。还是我错过了什么?

我的方面定义:

0 投票
1 回答
1314 浏览

java - 如何匹配在 AspectJ 中没有特定注释的方法

我有一个名为@Invisible 的自定义注释。现在我想匹配所有调用一个没有@Invisible Annotation 的方法。我怎样才能做到这一点?(带注解风格开发)

我的第一次尝试是:

但这似乎不起作用......

换句话说:如果该方法有 Invisible 注释,我想忽略它。否则我想根据我的建议执行一些代码......

0 投票
1 回答
836 浏览

java - 是否可以在第三方类上进行切入点以及如何切入点?

我在我的项目中使用了spring和ibatis,这是我的问题。

我想跟踪所有更改add/update/delete并将它们记录到 table 中T_TRACE_LOG。该表有列:operation_type, object_type, log_content, log_date

这是一个示例记录:

log_content 来自Customer.toString(),我希望这个过程自动进行,所以我想到了 AOP。

我无法控制客户端代码,因为一些用途addCustomer()和一些用途insertCustomer()和其他用途createCustomer()。但他们最后都打电话getSqlMapClientTemplate().insert("inserCustomer", Customer)了。所以我想切入点getSqlMapClientTemplate().insert()来匹配它们。

这是我的尝试,但它不起作用:

如果我将表达式更改如下:

因为AOP是根据源码把“切入点信息”编译成类字节码,所以我认为不可能在ibatis类上切入点。如果错了,我的情况如何处理?

这是配置: