Developers typically use field injection only on small projects and prototypes, due to its inability to support immutable variables and the incompatibilities it creates with many testing frameworks.
One common software design strategy is to define a class hierarchy explicitly, with major classes calling on the specific services they use. This makes the major class dependent on those subordinates ...