Сегодня поговорим о мало кому известной аннотации @Primary
. Возможно, вы о ней читали, но возьмусь предположить, как и я, наверняка, не использовали.
Для внедрения зависимостей в Spring IoC
используется @Autowired
, если контейнер "находит" бин с указанным типом, то производит "инъекцию" - все предельно просто. Теперь рассмотрим пример, когда есть контракт некого бина и несколько реализаций(в нашем случае две). Для того чтобы "подсказать" контейнеру, что именно инжектить, обычно, используется аннотация @Qualifier
, но есть еще один способ:
public interface Shape { int angles(); } @Primary @Component public class Triangle implements Shape { @Override int angles(){ return 3; } } @Component public class Square implements Shape { @Override int angles(){ return 4; } } @Component public class ShapeManager { @Autowired private Shape shape; }
Как можно догодаться, в ShapeManager
будет внедрен бин помеченный как @Primary
. Если заглянуть в доку, то гласит она буквально следующее: маркер(или индикатор) того, что данному бину будет отданно предпочнение среди прочих. Если существует только один класс помеченный данной аннотацией, то он будет внедрен в качестве зависимости.
No comments:
Post a Comment