问题标签 [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.
spring - 如何为多个包指定单个切入点
我正在使用 Aspect 在基于 spring mvc 的应用程序中记录活动。我正在使用@controller注释来定义我的应用程序中的任何控制器。我在两个不同的包中有两个不同的控制器说
- com.package1 包含控制器 1 类,我们将其命名为 AController
- com.package2 包含控制器 2 类,我们将其命名为 BController
我可以通过使用将方面应用于一个特定的控制器包
我的问题是如何在表达式(* package1. . . (..))**中指定多个不同的包。
现在,我为每个包声明一个单独的切入点,aop:before
并aop:after
为每个切入点声明一个单独的入口。但我认为这应该是定义多个包切入点的理想方式。
multithreading - 如何为同一类中的另一个方法调用的方法运行方面建议
我对 Spring AOP 很不满意。我正在尝试使用方面触发一个方法,但是将触发方面的方法也是同一个类的方法并且方面不起作用(顺便说一句没有错误)。像这样
任何想法将不胜感激
谢谢
java - Spring AOP 切入点不适用于抽象方法
我有以下切入点:
以及以下抽象类:
我的切入点仅在我调用 Poller.toString() 时适用,而不是 Poller.doPoll()。我希望它适用于在 Poller 类或其子类中采用任意数量参数的任何方法。为什么不是这样?
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的建议下得到了错误的答案!谢谢!
spring - 注释参数的 Spring AOP 切入点
假设我有这样的方法:
是否有一个切入点表达式可以选择所有带有@CustomAnnotation 注释的参数的方法?如果是这样,有没有办法可以访问“价值”参数?
aop - 如何将 context(ApplicationContext) 作为参数传递给 logBefore Method(Method of Aspect)?
我想实现一个方面来避免延迟加载问题。那么如何将上下文(应用程序上下文)作为 logBefore 方法的参数传递?什么是签名切入点定义了上面的方法(我制作“???”的地方),知道这个方法(logBefore)将在所有具有“Set”作为结果类型和“slm. aoa.buisiness.facade”作为包
并感谢您的帮助。
java - 切入点与继承混淆
我对编写一个匹配方法的所有执行的切入点感到困惑。我尝试了应该匹配类的所有方法执行的切入点Alpha
:
具有以下类层次结构
如果 Main-program 调用alphaMethod
-instanceBeta
我的建议会像预期的那样被调用,但是在我的建议内部调用的 Main-program 调用betaMethod
不会alphaMethod
被调用,我不明白为什么。
方面定义:
主要方法:
java - 类的所有方法的切入点,包括继承的方法
我正在玩 aop 和 aspectj 并发现了一个(对我来说)意想不到的行为。
在aspectj-docs中,我找到了以下示例切入点:
对于以下类定义(我稍微更改了原始示例):
该示例的描述指出:
[切入点] 为返回 void 且没有在 Middle 中声明或继承的参数的公共方法挑选所有方法执行,即使这些方法在 Middle 的子类中被覆盖。
这个例子对我来说工作得很好,但是如果 classSub
没有覆盖,则不会拦截从外部到on a -instancem()
的方法调用。这不违反文档吗?m
Sub
我在继承类中遇到了另一个问题,这是由使用代理引起的。但在这种情况下,使用代理不会导致这种行为,因为代理应该为所有代理类提供方法。还是我错过了什么?
我的方面定义:
java - 如何匹配在 AspectJ 中没有特定注释的方法
我有一个名为@Invisible 的自定义注释。现在我想匹配所有调用一个没有@Invisible Annotation 的方法。我怎样才能做到这一点?(带注解风格开发)
我的第一次尝试是:
但这似乎不起作用......
换句话说:如果该方法有 Invisible 注释,我想忽略它。否则我想根据我的建议执行一些代码......
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类上切入点。如果错了,我的情况如何处理?
这是配置: