Учу Spring по учебнику. Наткнулся на проблему - зависимости не внедряются. Обыскал уйму источников в инете, а там везде одно и то же пишут. Но у меня оно не работает. Работаю в Idea и Maven.
Есть, значит, Эминем
@Component public class Eminem { public void sing (){ System.out.println("Эминем читает рэп."); } }
Есть концерт
@Component ("concertoId") public class Concerto { private Eminem eminem; @Autowired public Concerto(Eminem eminem) { this.eminem = eminem; } public void doConcerto(){ eminem.sing(); } }
Есть конфиг
@Configuration @ComponentScan("beans") public class Config { @Bean public Concerto concertoId(){ return new Concerto(eminemId()); } @Bean public Eminem eminemId(){ return new Eminem(); } }
Есть Main
public class Main { public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class); Concerto concerto = applicationContext.getBean("concertoId", Concerto.class); concerto.doConcerto(); } }
Этот код работает, но я хочу знать всё ли я правильно понял, а потому вопросы:
1. Правильно ли я понял, что определение зависимостей осуществляется передачей ссылок в файле конфигурации? Например return new Concerto(eminemId()); (строка 7 конфиг-класса). Об этом я спрашиваю, потому что во всех примерах в инете нет ничего такого. Там просто return new Concerto(); А иногда и вообще нет конфиг-класса. Я не понимаю как передаются зависимости, если нет конфиг-класса.
2. Что в книге, что в примерах из инета говорится следующее: чтобы внедрить зависимость через метод, а не конструктор, просто уберите Autowired перед конструктором и поставьте его перед методом. Но это не работает! Я даже копировал готовые примеры из инета. Они тоже не работают. Я уже почти отчаялся. Помогите, пожалуйста.