首页 > 解决方案 > 没有实现的接口可以在spring boot的服务类中自动装配吗

问题描述

我在 youtube 上观看了一个春季教程视频他没有实现,他 public interface TopicRepository extends CrudRepository<Topic, String> 仍然可以通过编写来运行应用程序

@Autowired
private TopicRepository topicRepository;

在服务类中,但是当我尝试相同时,我收到如下错误:

io.spring.springbootstarter.topic.TopicService 中的字段 topicRepository 需要找不到类型为“io.spring.springbootstarter.topic.TopicRepository”的 bean。

注入点有以下注解:

  • @org.springframework.beans.factory.annotation.Autowired(required=true)

行动:

考虑在你的配置中定义一个 'io.spring.springbootstarter.topic.TopicRepository' 类型的 bean。

我是 spring 新手,我正在使用 spring 2.3.1

package io.spring.springbootstarter.topic;

import org.springframework.data.repository.CrudRepository;

public interface TopicRepository extends CrudRepository<Topic, String>{


   //getTopics()
   //getTopic(String id)
  //deleteTopic(String id)
  //updateTopic(Topic t)

}

在下面的课程中,我正在创建对象

package io.spring.springbootstarter.topic;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class TopicService {


@Autowired
private TopicRepository topicRepository;

public List<Topic> getAllTopics(){
    
    List<Topic> topics=new ArrayList<Topic>();
    topicRepository.findAll().forEach(topics::add);
     return topics;
}

public Optional<Topic> getTopic(String id) {
    
    return topicRepository.findById(id);
}


public void addTopic(Topic topic) {
    topicRepository.save(topic);
    
}

public void updateTopic(String id , Topic topic) {
    topicRepository.save(topic);
    
    
}

public void deleteTopic(String id) {
    topicRepository.deleteById(id);
    
    
    
    }


  }

标签: javaspringspring-boot

解决方案


扩展接口CrudRepository由 Spring 使用Spring Expression Language实现(自动生成) 。自动生成的类是 spring-beans,因此可以自动装配。

您可以在 Spring官方文档中找到有关 Spring Data Repositories 的更多信息。


推荐阅读