Прежде всего я хотел бы сказать, что я прочитал простые вопросы и реализовал их ответы, но, похоже, ничего не работает. TL; DR Я реализую пример из книги «Весна» и вот моя проблема. Начальный класс:
package com.example.demo;
@SpringBootApplication(scanBasePackages = {"com.example.demo", "com.example.demo.dao", "com.example.demo.model", "com.example.demo.service"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
A Класс контроллера:
package com.example.demo.api;
@Controller
@RequestMapping("/spittles")
public class SpittleController {
private SpittleRepository a;
@Autowired
public SpittleController(@Qualifier("abc") SpittleRepository a){
this.a = a;
}
}
Интерфейс:
package com.example.demo.dao;
@Repository("abc")
public interface SpittleRepository {
List<Spittle> findSpittles(long max, int count);
}
Мой вывод:
Description:
Parameter 0 of constructor in com.example.demo.api.SpittleController required a bean of type 'com.example.demo.dao.SpittleRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Qualifier(value="abc")
As Я уже говорил, что пример буквально скопирован из книги (я упростил его для цели вопроса). Единственная ситуация, когда эта программа не выдает ошибку, это когда я добавляю аннотацию: @ComponentScan("com.example.demo.dao")
в класс DemoApplication (но работает, только если внутри dao есть один файл). Кроме того, когда я заменяю ключевое слово интерфейса на ключевое слово класса, оно также работает.
Есть ли способ заставить класс (DemoApplication) найти этот интерфейс?