Posted by jcn at 23:59 on Tuesday 13 December
Ramnivas Laddad, een bekend gezicht binnen de AspectJ community en schrijver van het boek “AspectJ in Action: Practical aspect-oriented programming” geeft in zijn presentatie een overzicht van de mogelijkheden van AOP. Hij licht deze uitgebreid toe aan de hand van concrete voorbeelden in AspectJ.
De mogelijke toepassingen van AOP nog eens op een rijtje:
transaction management, thread safety, caching, resource pooling, profiling, policy enforcement, monitoring, testing, …
Voor diegenen die nog niet weten wat AOP inhoudt: kortgezegd is AOP een methodologie welke modularisatie van crosscutting concerns faciliteert op een manier die in een conventioneel model niet mogelijk is.
Dit is zinvol omdat in een conventioneel model crosscutting concerns nogal wat ongewenste nadelen hebben, zoals:
- code tangling (spaghetti code): unclear implementation, defocusing (vertroebeling), pool quality code (kleefcode), unintended prioritizing of concerns
- code scattering (niet-modulaire code): duplicate code, inconsistent implementation, difficult evolution
AOP is gebaseerd op het join point model, waarin advices (uit te voeren code) aan geselecteerde join points (identificeerbare aanhechtingspunten) gekoppeld worden, de pointcut genaamd. De combinatie advice/poincut wordt een aspect genoemd.
Het weaving model wordt gebruikt om de aspects daadwerkelijk in de code te integreren.
De syntax van het join point model is er in de volgende smaken:
- language extension (d.m.v. keywords; speciale compiler noodzakelijk)
- meta-data extension (d.m.v. annotation; compileerbaar met gewone compiler)
- xml-based definition
Het weaving model kent de volgende implementaties:
- compile-time
- binary weaving
- loadtime-weaving
Een interessante toepassing van AOP is er in combinatie met Hibernate: detached object management.
De probleemstelling: een close() op een Hibernate session creeert detached objects. Benaderen van deze detached objects in een nieuwe session is problematisch omdat uninitialized collections een exception veroorzaken.
De oplossing: gebruik een aspect om een reattach uit te forceren op de detached objects.
Een andere handige toepassing zijn virtual mocks, ofwel fault injection (testen foutsituaties).
Bijvoorbeeld: throw new Exception(), sleep(duration).
AOP kan ook gebruikt worden om crosscutting concerns te refactoren. Hierover zijn artikelen te lezen hier en hier.
Ramnivas Laddad verwacht de volgende adoption curve voor AOP, in oplopende volgorde: development aspects, refactoring aspects, infrstructure aspects, business logic, AO architecture. Google ook eens op AOP@Work.











