The general idea that an existing module or component can be changed by injecting additional behavior has been originally developed within aspect-oriented programming (AOP). And then this idea has been implemented in various frameworks like Spring (yet, not in its original form).