Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 зачем ставить квалифаеры к параметрам методов  [new]
rema174
Member

Откуда:
Сообщений: 2008
Не уловил зачем есть возможность ставить квалифаеры в конструктор и в сеттер? Ведь их можно не указывать там оба, или один на выбор оставить, главное, чтобы остался на поле класса и будет все работать.

    @Inject @EAN13
    private CodeGenerator codeGenerator;

    @Inject
    public ProductService(@EAN13 CodeGenerator codeGenerator){
        this.codeGenerator = codeGenerator;
    }

    @Inject
    public void setCodeGenerator(@EAN13 CodeGenerator codeGenerator) {}


так тоже будет работать
    @Inject @EAN13
    private CodeGenerator codeGenerator;

    @Inject
    public ProductService(@EAN13 CodeGenerator codeGenerator){
        this.codeGenerator = codeGenerator;
    }

    @Inject
    public void setCodeGenerator(CodeGenerator codeGenerator) {}


и так тоже будет
    @Inject @EAN13
    private CodeGenerator codeGenerator;

    @Inject
    public ProductService(CodeGenerator codeGenerator){
        this.codeGenerator = codeGenerator;
    }

    @Inject
    public void setCodeGenerator(CodeGenerator codeGenerator) {}


а так будет использоваться EAN5
    @Inject @EAN5
    private CodeGenerator codeGenerator;

    @Inject
    public ProductService(@EAN13 CodeGenerator codeGenerator){
        this.codeGenerator = codeGenerator;
    }

    @Inject
    public void setCodeGenerator(@EAN13 CodeGenerator codeGenerator) {}


Сообщение было отредактировано: 14 апр 20, 18:34
14 апр 20, 18:30    [22116168]     Ответить | Цитировать Сообщить модератору
 Re: зачем ставить квалифаеры к параметрам методов  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3543
rema174
Не уловил зачем есть возможность ставить квалифаеры в конструктор и в сеттер? Ведь их можно не указывать там оба, или один на выбор оставить, главное, чтобы остался на поле класса и будет все работать.

вам нужно с DI разобраться сначала.
- с field dependency injection возникает дрочь, когда хочется руками зависимости собрать (например в тестах)
- setter-based dependency injection предполагает что бин может быть неправильно инициализирован, да и то что он мутировать может так себе затея
- constructor-based dependency injection - оно более менее оптимально, если полей не больше 3-4 (если больше, то дизайн явно кривой)
14 апр 20, 22:32    [22116397]     Ответить | Цитировать Сообщить модератору
 Re: зачем ставить квалифаеры к параметрам методов  [new]
rema174
Member

Откуда:
Сообщений: 2008
Андрей Панфилов,

как я понял, эти точки инжекции должны быть взаимозаменяемы, т.е. можно влюбом месте внедрять на выбор,
но мой пример вроде показывает обратное, т.е. если убрать на конструкторе, то получим

автор
WELD-001334: Unsatisfied dependencies for type ProductService with qualifiers


хотя квалифаер то указан на поле класса

@Inject @EAN13
private CodeGenerator codeGenerator;
15 апр 20, 10:03    [22116521]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить