Bra*_*rad 8 aop spring aspectj
我正在使用Spring 3.1.2.RELEASE和cglib加载时编织,我正在尝试使用具有自定义注释和注释参数的方法.
建议:
@Aspect
public class MyAdvice
{
@Around("execution(@com.mycompany.locking.Lock * *(@com.mycompany.locking.LockVal(*), ..)) " +
"&& args(batch) && @args(propertyToLock)"
public Object lockAndProceed(ProceedingJoinPoint pjp, Object batch, LockVal propertyToLock) throws Throwable {
//Do stuff....
pjp.proceed();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在测试的类:
public interface UpdateManager
{
public void processUpdate(MyBatchObject batch);
}
public class UpdateManagerImpl implements UpdateManager
{
@Lock
public void processUpdate(@LockVal("lockValue") MyBatchObject batch)
{
//Do stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法获得执行建议.如果我删除了切入点中的@args和args条件,那么建议就会触发,但是我必须通过ProceedingJoinPoint来获取我需要的参数.
为什么不提出建议?我做错什么了吗?
编辑:以下切入点作为Spring的独立程序工作:
@Aspect
public class MyAdvice
{
@Around("execution(@com.mycompany.locking.Lock * *(@com.mycompany.locking.LockVal(*), ..)) " +
"&& args(batch)"
public Object lockAndProceed(ProceedingJoinPoint pjp, Object batch) throws Throwable {
//Do stuff....
pjp.proceed();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它在使用加载时编织的JBoss 6下不起作用.我想我的问题应该是,为什么它作为一个独立的程序工作,而不是在JBoss 6下?
这不是一个解决方案,但应该让您更进一步:
我假设您在注释中犯了一个拼写错误,您的意思可能是,@Aspect但不是@Advice?
我的建议是尝试这些:
A。分为命名切入点和要应用于切入点的建议:
@PointCut("execution(@com.mycompany.locking.Lock * *(@com.mycompany.locking.LockVal(*), ..)) && args(batch) && @args(propertyToLock)")
public void mypointcut(Object batch, LockVal propertyToLock){}
@Around("mypointcut(batch, propertyToLock)"
public Object lockAndProceed(ProceedingJoinPoint pjp, Object batch, LockVal propertyToLock) throws Throwable {
//Do stuff....
pjp.proceed();
}
Run Code Online (Sandbox Code Playgroud)
b. 可能是args表达式或@args表达式导致了问题 - 尝试保留一个并删除另一个,看看哪种组合有效。
C。如果这不能缩小范围,另一种选择可能是显式添加一个argNames表达式,这可能是参数名称被清除并且在运行时没有按名称匹配:
@PointCut("execution(@com.mycompany.locking.Lock * *(@com.mycompany.locking.LockVal(*), ..)) && args(batch) && @args(propertyToLock) && argNames="batch,test1,test2")
public void mypointcut(Object batch, LockVal propertyToLock){}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34379 次 |
| 最近记录: |