Как мне переписать код, чтобы Spring автоматически вставлял компоненты в конструктор класса? - PullRequest
0 голосов
/ 25 мая 2020

Изучая Spring и наткнулся на трудности. Как вводить beans через конструктор или через поля? Я научился делать это через конфигурацию XML, но через аннотации это не работает. Вот мой код. Интерфейс Musi c:

public interface Music {
    public String playMusic();
}

Class FolkMusi c:

@Component
public class FolkMusic implements Music {
   @Override
   public String playMusic() {
       System.out.println("FOLK");
       return null;
   }
}

Class HipHipMusi c:

@Component
public class HipHopMusic implements Music {
    @Override
    public String playMusic() {
        System.out.println("HipHop");
        return null;
    }
}

Class MusicPlayer:

@Component
public class MusicPlayer {
    ArrayList<Music> mu;
    @Autowired
    public MusicPlayer(ArrayList arrayList){
        mu = arrayList;
    }
    public void playMusic(){
        System.out.println("Size = " + mu.size());
    }
}

Искать компоненты в XML:

    <context:component-scan base-package="cam.mark.mus"/>

Как мне переписать код, чтобы Spring автоматически вставлял компоненты в конструктор класса MusicPlayer? С этим кодом в консоли не появляются ошибки. В результате отображается «Размер = 0»

1 Ответ

0 голосов
/ 25 мая 2020

Вам нужно использовать List вместо ArrayList. Также убедитесь, что вы передаете List<Music>, а не List в конструкторе.

MusicPlayer должно выглядеть так:

@Component
public class MusicPlayer {

    List<Music> mu;

    public MusicPlayer(List<Music> arrayList) {
        mu = arrayList;
    }

    public void playMusic() {
        System.out.println("Size = " + mu.size());
    }
}

Вы можете опустить @Autowired в конструктор, потому что конструктор только один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...