Adnotacje są częścią standardu języka więc nic nie wprowadzasz ;) Ciekawi mnie trochę co zrobisz jak zależność będzie krzyżowa... :D
Jeśli zależność jest krzyżowa, to znaczy, że projekt jest zwalony, więc równie dobrze można porzucić IoC, wszystko tworzyć ręcznie, przejść na zmienne globalne i przemieszczać się po kodzie za pomocą goto
.
Natomiast jeśli obiekt X korzysta z obiektów A, B i C, to naturalne jest przekazywanie ich przez konstruktor. Wówczas od razu widać, od czego dany obiekt zależy i czego do życia potrzebuje. Adnotowane pola ustawiane magicznie z zewnątrz, są po pierwsze nieczytelne - wyszukanie pól z adnotacją w kodzie trwa dłużej niż przeczytanie nagłówka konstruktora, a poza tym śmierdzą bardzo zmiennością, a obiekty powinny być tak niezmienne jak to możliwe. Poza tym, w razie potrzeby można taki obiekt zawsze utworzyć z palca, łatwo go też mockować w testach bez potrzeby korzystania z IoC.
No, ale zapewne w Javie bardziej się przyjęły adnotacje, bo to po pierwsze nowość w języku, a po drugie zapewne można do tego dopisać dużo konfiguracji w XML, a nie męczyć się z 10 linijkami IoC na cały projekt jak w konkurencyjnych technologiach.