The first three arguments are optional, and only useful if we want further
information about the joinpoint, as in AspectJ after-throwing advice.

Note: If a throws-advice method throws an exception itself, it will
override the original exception (i.e. change the exception thrown to the user).
The overriding exception will typically be a RuntimeException; this is compatible
with any method signature. However, if a throws-advice method throws a checked
exception, it will have to match the declared exceptions of the target method
and is hence to some degree coupled to specific target method signatures.
Do not throw an undeclared checked exception that is incompatible with
the target method's signature!