Wstrzykiwanie zależności w Springu.

0

Cześć, mam taki problem posiadam interfejsMessageService z jedną metodą sendMessage(title,message). Następnie mam dwie klasy, które implementują ten interfejs są to odpowiednio Sms i Email. Mam też kolejną klasę Person, w której korzystam z auto wiązania i wstrzykuję implementację MessageService, robię to tak:

    @Autowired
    public Person(@Qualifier("sms") MessageService messageService) {
        this.messageService = messageService;
    }

Teraz moje pytanie jest takie czy jest jakaś inna możliwość powiązania MessageService? Tak bym mógł np. otrzymać obiekty typu Person jeden z implementacją Sms, a drugi z Email.

1

@ Autowited wiąże po typie i dostaje bzika jak jest kilka implementacji, a @Qualifer po nazwie więc właśnie tak to zrobiłeś. Zanim zaczniesz programować w Springu lepiej poczytaj najpierw dokumentacje. A nie wspomne o tym że pomysł wstrzykiwania obiektu z logiką to modelu jest absurdalny tak samo jak robienie z prostego modelu DTO czy z entity beana :D

0

Uwielbiam odpowiedzi nie na temat. To był tylko przykład do zademonstrowania. Moje pytanie dalej jest aktualne. Czy istnieje możliwość utworzenia dwóch obiektów Person z różnymi implementacjami MessageService? Załóżmy jedną osoba będzie chciała wysyłać wiadomości przez smsy, a druga przez email. Jak osiągnąć taki efekt. Najlepiej pozbył bym się Qualifier i podczas pobierania beana zdecydował z jakiej implementacji powinien on skorzystać.

1

Możesz wstrzyknąć Map<String, MessageService>. Kluczem w takiej mapie będzie nazwa beana (taka sama jak obecnie używana w @Qualifier) i potem wybrać konkretną implementację z mapy, tylko jakiś default ustawić jak użytkownik ma dziwne dane zapisane w profilu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1