Вы (вроде) правы, ваш пример работает без квалификаторов.Но скорее ваш пример немного вводит в заблуждение, чем то, что вам не нужны квалификаторы.
В общем, вам понадобятся квалификаторы всякий раз, когда у вас есть более одного управляемого бина определенного типа, подходящего дляинъекции .Это не так в вашем примере, но легко было бы, если бы вы написали свой код следующим образом:
public class Breakfast {
@Inject Eatable somethingToEat;
}
(Это дает вам гибкость для изменения вашей реализации позже, по той же причине, по которой вы обычно пишетеList list = new ArrayList()
)
Вам не понадобятся квалификаторы, если у вас есть только один управляемый компонент определенного типа, пригодный для инъекции.
Более серьезные примеры, которые вы хотите использоватьквалификаторы выглядят так:
Представьте, что вы хотите иметь класс Locale
в вашей системе.Использование разных квалификаторов (вместе с разными методами производителя) позволит вам написать код, подобный следующему:
...
@Inject
@DefaultLocale
Locale theDefaultLocale;
...
@Inject
@StandardLocale
Locale theStandardLocale;
...
@Inject
Instance<Locale> allLocales;
...
Подводя итог: квалификаторы нужны тогда и только тогда, когда у вас есть более одного компонента одного типа.Это делает квалификаторы избыточными для подавляющего большинства ваших бобов, но они вам наверняка понадобятся.
Все это и многое другое лучше прочитать здесь .