We use injections a lot and here comes arhcitectural question - who and when should implement it.
Let's take simple example. Class Farm can handle Plantable object which are injected. It could be Trees, Vegetables, etc. Each Plantable object has ways to be Startable (planted) which is injected too.
Question is who is responsible for second injection? If it is Farm then it should be smart enough to know all possible Plantable objects and so Farm became god object. If it is Tree then it should be complicated object to use reflection and to know about Farm which has it. Instead of being simple Plantable object which should take care of itself it should be aware of environments, possible types of Farms, etc.
External configuration file like Spring configuration is not the solution because number of all types objects is big and dynamic.
Ideally Plantable and Startable objects should be added on the fly and take care of themseves and don't depend on each other as it should be in OOP world.