Aspect-Oriented Programming (AOP) represents OOP (Object Oriented Programming) by giving the developer to dynamically change the static OO model to make a system that can grow to meet new needs.
AOP allows you to dynamically change your static model consisting mainly of business logic to add the code needed to fulfill the secondary requirements or in AOP terminology called cross-cutting concerns like security, logging, auditing, exception handling etc without having to change the original static model. Better still, we may often keep this additional code in a single location rather than having to scatter it across the existing model.
AOP nomenclature is distinct from OOP and can be defined as given below:
Join points: presents the point at which a cross-cutting concern like auditing, logging etc intersects with a main concern like the core business rule. Join points are locations in programs' operation path like function & constructor call, function & constructor execution, field access, exception handling execution, class & object initialization etc.
Pointcut: is a language construct that identifies specific join points within the code. A pointcut describes a collection of join points and also gives a context for the join point.
Advice: is an implementation of a cross-cutting concern which is a part of code that is executed upon reaching a pointcut within a code.
Aspect: encapsulates join points, pointcuts and send into a reusable module for the cross-cutting concerns which is similar to Java classes for the core concerns in OOP. Classes and aspects are not related to each another. Classes are unaware of the presence of aspects, which is an important AOP principle. Only pointcut declaration binds aspects and classes.
Weaving is the process for interleaving separate cross-cutting rules such as logging into core concerns such as business rules code to complete the system. AOP weaving composes distinct implementations of aspects into a cohesive system laid on weaving rules. The weaving process can occur at:
- Compile-time: Weaving happens during compilation process.
- Load-time: Weaving happens at the byte-code level at class loading time.
- Runtime: Similar to load-time where weaving happens at byte-code level during runtime as join points are reached in the executing code.