Aspect Oriented Development Alex Beatty
Purpose Cross-cutting Concerns Join Points, Pointcuts, and Advices Weaving Invasive vs. Non-Invasive Static vs. Dynamic Introduction
What is a cross-cutting concern? Examples Reduction of code tangling and code scattering Abstraction Obliviousness Expert Development Object Reuse Purpose
Join Point - Point in the base code that aspect code can utilized Examples A method being called A method’s code being run Initialization Join Points
User defined join point(s) to utilize aspect code with AspectJ examples execution(!static * (Class1 || ClassA).*(..)); call(void Set*(int)); Explanation Pointcuts
Basically a function before, after, and around key words around has a special proceed() function Has access to some information from base code Function name, parameters, return type, return value Advice
Static vs dynamic Compile-time vs load- or run-time Invasive vs non-invasive Directly changing base code or not Weaving
Logging Coordination Security Mutual Exclusion Applications
Coordination Silent Single Bid Public English Style
Confusion about it’s role Anti-pattern: Action at a distance Downsides
Java-based Pointcuts Can use logical operators Can be named Advices are formatted like java functions AspectJ
pointcut functionExecution(): execution(!static * (Class1 || ClassA).*(..)) Name Join point type Join point specification AspectJ Pointcuts
Name Shorter than the pointcut itself Can include parameters to capture access to an object pointcut setter(Person p): target(p) && … AspectJ Pointcuts
Methods and Constructors call(Signature) / execution(Signature) AspectJ Pointcut Types //before call Person.walk(); //after call Private void walk() { //before execution //TODO: write function body //after execution }
Fields get(Signature) / set(Signature) E.g. set(int Racer.*) AspectJ Pointcut Types private int id; … //before set id = 42; //after set
Instanceof checks and context exposure this(type or id) / target(type or id) / args(type or id) E.g. args(newval), target(Racer) Others AspectJ Pointcut Types
void around(Racer r): criticalSection(r) { int i = (int) r.getId(); …proceed(); … } thisJoinPoint Can be used to get arguments, signature, target, etc thisJoinPoint.getArgs(); AspectJ Advices
Example of Mutual Exclusion Aspect
Questions
[1] Aspect-oriented software development. In Wikipedia. Retrieved October 20, 2013, from oriented_software_development [2] Rohit Sethi. “Aspect-Oriented Programming and Security”. Retrieved October 28, 2013, from [3] Fuentes, Lidia; Sánchez, Pablo. “Aspect-Oriented Coordination”. In Science Direct. Retrieved from [4] Aspect Weaver. In Wikipedia. Retrieved October 28, 2013, from [5] Piveta, Eduardo Kessler; Zancanella, Luiz Carlos. “Aspect Weaving Strategies”. In Journal of Universal Computer Science. Retrieved from [6] The AspectJ Programming Guide. Retrieved October 28, 2013, from References