Ich habe einfach Aspect mit primitiven Pointcut geschrieben und Beratung Methode:Set eine AspectJ Beratung für statische Methode
@Aspect
public class MyAspect {
@Pointcut("execution(static * com.mtag.util.SomeUtil.someMethod(..))")
public void someMethodInvoke() { }
@AfterReturning(value = "someMethodInvoke())", returning = "comparisonResult")
public void decrementProductCount(List<String> comparisonResult) {
//some actions
}
}
Ich habe folgenden Frühling Annotation-basierte Anwendung config:
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
//...
}
und Utility-Klasse in com.mtag.util Paket:
public class SomeUtil {
static List<String> someMethod(List<String> oldList, List<String> newList) {
//...
}
}
aber wenn ich rufe
im Komponententest Ich kann sehen, dass Methodenaufruf nicht abgefangen wird und mein @AfterReturning Advise funktioniert nicht.
Aber wenn ich irgendeinemethode() ändern, um beispielsweise ein (nicht statisch) Methode, pointcut zu
@Pointcut("execution(* com.mtag.util.SomeUtil.someMethod(..))")
und SomeUtil Bohne von Spring verwalten, indem @Component Annotation und Anrufziel Hinzufügen metod wie folgt aus:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class}, loader = AnnotationConfigContextLoader.class)
public class SomeUtilTest {
@Autowired
private SomeUtil someUtil;
@Test
public void categoriesDiffCalc() {
List<String> result = someUtil.someMethod(...);
}
}
Alles ist in Ordnung.
In welcher Weise kann ich einen Hinweis für statische Methode einstellen?
'@AfterReturning (value = "someMethodInvoke())"' Sie eine zusätzliche Halterung – tibtof
@izhamoidsin haben, ist die Antwort zur Verfügung gestellt (von mir) akzeptiert. Oder dieser ist falsch? –