01. november 2007 - 11:30Der er
12 kommentarer og 1 løsning
Spring 2.07 AOP + AspectJ
Hej,
Jeg har en simpel bønne, med en metode der hedder således: public Date getDueDate();
men har det problem at i mit dao lag må denne værdi ikke være null. så jeg skal sætte en default værdi hvis den nu engang er det. da det ikke er en imutable så kunne jeg godt tænke mig at prøve med AOP, og da det ligger i Spring alligevel så vil jeg prøve at lege med det.
Jeg har så lavet en lille aspect klasse og konfigureret spring til autoproxy,
@Aspect public class Aspects { @Pointcut("execution(* *.getDueDate())") public void dateHandler() {}
@AfterReturning(pointcut = "dateHandler()") public void handleNullDate() { System.out.println("handleNullDate"); } }
Det virker fint, "handleNullDate" bliver printet, men nu skal jeg manipulere min data, hvis den er null..
SÅ spørgsmålet er: Hvordan får jeg fat i den værdi getDueDate() returnrer, og hvordan kan jeg manipulere den og returnrer min default værdi hvis den er null ??
Hvis du vil læse lidt om AOP har jeg skrevet følgende. Det er dog ikke helt nyt. Har desværre ikke haft tid til at opdatere dokumentet. Måske kan det hjælpe.
Ah.. @AfterReturning kan ikke modificere data.. det er superb.. 1000 tak..
Lige en lille ting mere: Jeg er ikke helt fan af at, når jeg kigger på min kode ikke fårstår at den laver mærkelige ting.. Så jeg kunne godt tænke mig at jeg kunne annotere hvilke metoder mine pointcuts skal kigge på, og ikke bare et pattern der ligger beskerevet et helt andet sted, er det ikke muligt at lave en form for indikatorer på metoderne eller lign ?
Når jeg så kan execute når de rigtige metoder bliver kaldt, hvordan kan jeg så definere at det kun er når det er min dao der kalder.. og ikke når alle andre kalder ?
Ved standalone AspectJ ville jeg kun oversætte DAO med aspect'et.
Du må kunne angive i Spring at det kun skal gøres for en klasse.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.