У меня есть следующие 3 модуля в моем приложении с весенней загрузкой:
- web (точка входа / основной класс приложения, аннотированный
@SpringBootApplication
- постоянство
- service
Сейчас я пытаюсь внедрить сервис в модуль web
, который поступает из service
. В сервисе я внедряю репозиторий, который поступает из persistence
модуль. Когда я запускаю приложение, появляется следующая ошибка:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.project.service.images.ImageService required a bean of type 'com.project.persistence.repositories.ImageRepository' that could not be found.
Action:
Consider defining a bean of type 'com.project.persistence.repositories.ImageRepository' in your configuration.
ImageService
класс:
package com.project.service.images;
import com.project.common.entities.Image;
import com.project.persistence.repositories.ImageRepository;
import com.project.service.AbstractService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.persistence.EntityNotFoundException;
import java.util.Date;
import java.util.List;
@Component
public class ImageService extends AbstractService {
private final ImageRepository imageRepository;
@Autowired
public ImageService(ImageRepository imageRepository) {
this.imageRepository = imageRepository;
}
public Image getImage(Long id) {
return imageRepository.findById(id).orElseThrow(EntityNotFoundException::new);
}
public List<Image> getAll() {
return imageRepository.findAll();
}
public List<Image> getAll(Date from) {
return imageRepository.findByDateRange(from, null);
}
public List<Image> getAll(Date from, Date to) {
return imageRepository.findByDateRange(from, to);
}
public List<Image> getAllForDay(Date day) {
return imageRepository.findAll();
}
}
ImageRepository
класс:
package com.project.persistence.repositories;
import com.project.common.entities.Image;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@Repository
public interface ImageRepository extends JpaRepository<Image, Long> {
@Query("SELECT i FROM Image i WHERE i.created > :from AND i.created < :to")
public List<Image> findByDateRange(@Param("from") Date from, @Param("to") Date to);
}
Вот как я внедряю службу в свой класс в модуле web
:
@Autowired
private ImageService imageService;
Итак, я искал через inte rnet и увидел людей с похожими проблемами. Затем я получил подсказку что я должен добавить scanBasePackages
к аннотации SpringBootApplication
в моем классе приложения. Итак, я сделал это:
package com.project.web;
@SpringBootApplication(scanBasePackages = "com.project.service")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Но он все равно не работает. Если я добавлю специальный пакет c для сканирования к аннотации com.project.service.images
инъекция ImageService
работает, но затем не может найти * 10 37 * в нем.
Что я делаю не так?
Я знаю, что такое количество модулей не имеет смысла для такого небольшого приложения, но мне нужно, потому что это для моего ученичества, и мы нужно сделать несколько модулей.