Mam trochę problemów z opracowaniem sposobu cięcia, który będzie działał na ziarnach, które mają określony parametr z adnotacjami. Moim ostatecznym celem jest zweryfikowanie wartości parametru przed jego przetworzeniem, ale na razie wystarczy utworzyć punkt cięcia.Jak napisać punkt cięcia Aspect na podstawie opisanego parametru
Rozważmy następującą adnotacją
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.PARAMETER })
public @interface MyAnnotation {}
bym wówczas jak zastosować to do wielu metod, takich jak:
public void method1(@MyAnnotation long i) {}
public void method2(String someThing, @MyAnnotation long i) {}
public void method3(String someThing, @MyAnnotation long i, byte value) {}
Więc
- Nie dbam o których klasa (lub pakiet) metody są w
- Położenie adnotata Argument ed będzie się różnić.
- wiem, że odnotowany wartość będą miały zastosowanie tylko do określonego typu
Moja realizacja punktu przekroju musi być coś wzdłuż linii:
@Before(value = "* *(..) && args(verifyMe)")
public void verifyInvestigationId(long verifyMe) {}
Dostaję nieco zdezorientowany o czym dokładnie musi być ta wartość i jak powiązać adnotację i jej typ. W tym momencie prawdopodobnie nie warto wymieniać rzeczy, które wypróbowałem!
Aktualizacja: Na podstawie opinii widziałem w http://stackoverflow.com/questions/3565718/pointcut-matching-methods-with-annotated-parameters/3567170#3567170 (i korygowania parę nieporozumienia i dodanie miejsca przeoczyłem) muszę punktu, w którym następujące utwory:
@Before("execution(public * *(.., @full.path.to.MyAnnotation (*), ..))")
public void beforeMethod(JoinPoint joinPoint) {
System.out.println("At least one of the parameters are annotated with @MyAnnotation");
}
To jest prawie to, czego potrzebuję - wszystko, co musisz zrobić, to przekazać wartość adnotacjami argumentu jako parametr metoda. Nie mogę dokładnie opracować składni, aby zmusić Spring do zrobienia tego (połączona odpowiedź tego nie pokazuje).
możliwe duplikat [pointcut odpowiadających metodami dodając opisane parametry] (http://stackoverflow.com/questions/2766844/pointcut-matching-methods-with-annotated-parameters) – sheltem
@sheltem, Dzięki za wskazanie mi, że to. Niestety była to jedna z rzeczy, które próbowałem, ale się nie udało. Logi zawierały błąd: Pointcut nie jest dobrze sformułowany: oczekuje "wzorca nazwy" przy pozycji znaku 56 wykonanie (public * * (.., @ aspects.VerifyMe (*), ..)) – Stormcloud
BTW: są dwa gwiazdki oddzielone spacją po słowie "public" - stackoverflow zinterpretował je jako kursywa! – Stormcloud