Introductions are a very strong component of the Spring AOP. They permit us to dynamically introduce new one-object functionalities as the implementation of interfaces on existing objects:
To create a mixin, adding to the state held in the object. This is probably the most important use.
To expose additional states associated with a special TargetSource. This is used within Spring, for example, with scripting support.
To expose an object or object graph in a different way—for example, making an object graph implement the XML DOM interfaces.
Introductions are often mixins that allow one to obtain the effects of multiple inheritance in Java.
To allow the implementation of interfaces at runtime rather than more simply at compile time makes sense in cases where the crosscutting functionalities don't allow us to easily choose the way at compile time.
In the documentation of Spring 1.x, we had introductions, object locking, and modification detection as examples of use.
In the case...