With dependency injection, the programmer usually implements
the dependency declaring an attribute with its type
being the target component, through the composite element.
The dependency solving normally occurs automatically at run-time by getting a component instance by means of a dependency
injection framework. There are two main advantages
associated with this practice: (1) smaller and cleaner
source code at the SPL, since it’s not necessary to manually
implement the dependencies; and (2) fewer implementation
errors, since it’s responsibility of the framework to solve the
dependencies.