A Joinpoint is a candidate point in the Program Execution of the application where an aspect can be plugged in. This point could be a method being called, an exception being thrown, or even a field being modified. These are the points where your aspect’s code can be inserted into the normal flow of your application to add new behavior.
A Pointcut defines at what Joinpoints, the associated Advice should be applied. Advice can be applied at any Joinpoint supported by the AOP framework. Pointcuts allow you to specify where you want your advice to be applied. Often you specify these Pointcuts using explicit class and method names or through regular expressions that define matching class and method name patterns. (Pointcuts are those Joinpoints where you can put your advice, hence can be seen as a subset of Joinpoints).
The main purpose of AOP is decoupling the cross-cutting concern logic (Aspect) from the application code and to implement this in Spring we would need to use Advice. An advice can be said to be the actual code you put into the selected paths (all places in your code where you weave aspect code).