Annotations require one to rewrite or modify source code just to do dependency injection. This makes annotations an intrusive technology; this means it is incompatible with legacy code.
As someone who has a Ph.D. in scientific computing and who uses it every day to do datamining and to author statistical algorithms, I find dependency injection very useful in Java numerics code because most of the algorithm can only be re-used if reconfiguration of the data flow is easy. I'm not about rewrite my functioning, optimized legacy code unnecessarily. I'm using Spring for ioc and forgetting about EJB; I'll leave that to masochistic software engineers.