Spring autowired na metodę

0
package soundsystem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class CDPlayer {
    private CompactDisc cd;
    
    @Autowired
    public CDPlayer(CompactDisc cd) {
        this.cd = cd;
    }
    public void play() {
        cd.play();
    }
}

Jaki sens ma użycie tego @Autowired w metodzie? Przecież i tak przy tworzeniu obiektu tej klasy muszę w argumencie podać obiekt CompactDisc?

    @Autowired
    private CompactDisc cd;
/*.
.
.
.
*/

        CDPlayer use = new CDPlayer(cd);

        use.play();
1

No nie ma. Autowired używaj na konstruktorze - wtedy to Spring tworzy instancje klasy z beanami które znajdzie w kontekście. Autowired przez metodę stosuj wtedy kiedy parametr jest opcjonalny do działania klasy (np gdy klasa ma sprecyzowana domyślne zachowanie a ty chcesz je opcjonalnie nadpisać gdy istnieje bean) i wtedy dawaj required = false

@Autowired(required = false)
public void setDisplay(Display display) {}
1

@teez a po co w takmi razie w ogóle ci tam @Component skoro tworzysz ten obiekt ręcznie? Inject/Autowired jest zwiazany z obiektami zarządzanymi przez kontener a nie takimi które tworzysz sobie ręcznie. Gdyby ten twój obiekt był tworzony przez Springa to automatycznie wrzuciłby mu tą zależność.
Niemniej akurat nie ma to specjalnie sensu dla klas które pokazałeś.

0

Gra. ;)

3

Niech to szlag. Jak zwykle spóźniony gdy wołają.

0

Hahahahah, byłem pewny, że to jest jakieś oznaczenie do formatowania postu (tagowanie, cokolwiek). :D

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