的create()
切入點工作得很好,但我不能得到,但是我嘗試setStatus()
切入點工作...我試着@Before
,@After
,@AfterReturning
,但一無所獲。很簡單的Spring AOP切點
根據調試器,調用這兩種方法。
package com.baz;
@Aspect
public class ServiceAspect {
@Pointcut("execution(* com.foo.ServiceImpl.create(..))")
public void create() {}
@Pointcut("execution(* com.bar.Subscription.setStatus(..))")
public void setStatus() {}
// works
@AfterReturning(pointcut="create()", returning="retVal")
public void afterCreate(Object retVal) {
// omitted
}
// doesn't work
@Before("setStatus()")
public void status() {
// omitted
}
// doesn't work
@Before("setStatus() && args(status)")
public void status(int status) {
// omitted
}
// doesn't work
@After("setStatus()")
public void status() {
// omitted
}
// doesn't work
@AfterReturning(pointcut="setStatus()")
public void status2() {
// omitted
}
// doesn't work
@AfterReturning(pointcut="setStatus()", returning="retVal")
public void afterSetStatus(Object retVal) {
// omitted
}
// doesn't work
@Around("setStatus()")
public Object aroundStatus(ProceedingJoinPoint pjp) throws Throwable {
Object output = pjp.proceed();
return output;
}
}
的方法是這樣的:
public class Subscription extends FooBar implements Baz {
public void setStatus(int status) { /* ... */ }
}
public class ServiceImpl implements Service {
public Subscription create(Session session, Subscription template) { /* ... */ }
}
編輯
我同時使用<aop:aspectj-autoproxy />
,<aop:aspectj-autoproxy proxy-target-class="true"/>
和<aop:aspectj-autoproxy proxy-target-class="false"/>
嘗試。
編輯2
我已經打過電話setStatus()
直接Subscription
,但它並沒有趕上,要麼。
Subscription subscription = new Subscription();
subscription.setStatus(1);
'com.bar'是'setStatus'切入點的正確包名嗎? –
@ nicholas.hauschild是的,否則在初始化過程中會得到RuntimeException – Oscar
您是否嘗試直接在Subscription類型的對象上調用'setStatus()'方法並查看是否調用了@ @ Before'建議? – Vikdor