Think of a concern as a functionality group e.g. logging, auditing, security
These functionalities are ever present in most code, but they don't really live in our animal->dog classes - they are functionality that should live in many classes - they are cross cutting concerns.
A Joinpoint is a place in the code where the aspect code is actually ran.
A pointcut is how to say what code runs at the jointpoint.
Weaving - is when the compiler/system takes your normal code and includes all the AOP code so that it triggers the correct code etc - can think of this as an extra pre-compile step.
A simple understandable example is:
- We want to track all method calls for debugging purposes (i.e. We want to see which methods get called in what order).
- We create an aspect that logs the name of the method when it gets called
- We create pointcuts that associate the aspect with all methods in the code. In most AOP frameworks you can do this easily with some wild cards
- We now have logging of every method ever called.
Please be aware that terminology differs slightly between different implementations and AOP frameworks.