我正在尝试在 Spring Boot 上为我的项目定义架构
我要做的是创建一个从 JpaRepository 扩展的通用存储库
public interface BaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {
}
之后,每个 EntityDao 都会从 BaseRepository 扩展
@Repository
public interface AuthorityDao extends BaseRepository<Authority, Long> {
Authority findById(Long idRole);
Authority findByRoleName(String findByRoleName);
}
这就是我在存储库层上的做法。在服务层,我创建了一个名为 GenericService 的类,它实现了 IGenericService 并将我的 BaseRepository 注入其中:
@Service
public class GenericService<T, D extends Serializable> implements IGenericService<T, D> {
@Autowired
@Qualifier("UserDao")
private BaseRepository<T, D> baseRepository;
// implemented method from IGenericService
}
每个服务都将从 GenericService 扩展:
public class AuthorityService extends GenericService<Authority, Long> implements IAuthorityService {
@Autowired
GenericService<Authority, Long> genericService;
当我运行该项目时,我收到此错误:
应用程序无法启动
说明:
fr.java.service.impl.GenericService 中的字段 baseRepository 需要找不到类型为“fr.config.daogeneric.BaseRepository”的 bean。
行动:
考虑在您的配置中定义“fr.config.daogeneric.BaseRepository”类型的 bean。
我怎么解决这个问题?
更新:
@SpringBootApplication
@EntityScan("fr.java.entities")
@ComponentScan("fr.java")
@EnableJpaRepositories("fr.java")
@EnableScheduling
@EnableAsync
@PropertySource({ "classpath:mail.properties", "classpath:ldap.properties" })
@EnableCaching
@RefreshScope
public class MainApplication extends SpringBootServletInitializer {
private static final Logger log = LoggerFactory.getLogger(MainApplication.class);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MainApplication.class);
}
public static void main(String[] args) {
log.debug("Starting {} application...", "Java-back-end-java");
SpringApplication.run(MainApplication.class, args);
}
}