Java Spring引导中的循环依赖

Java Spring引导中的循环依赖,java,spring-boot,Java,Spring Boot,我试图在我的bootspring项目中使用restTemplate,编译时出现如下错误: There is a circular dependency between 4 beans in the application context: - courseController (field com.example.service.CourseService com.example.controller.CourseController.courseDAO) - courseServiceRest

我试图在我的bootspring项目中使用restTemplate,编译时出现如下错误:

There is a circular dependency between 4 beans in the application context:
- courseController (field com.example.service.CourseService com.example.controller.CourseController.courseDAO)
- courseServiceRest (field private com.example.dao.CourseDAO com.example.service.CourseServiceRest.courseDAO)
- courseDAOImpl (field private org.springframework.web.client.RestTemplate com.example.dao.CourseDAOImpl.restTemplate)
- studentDAOImpl (field private org.springframework.web.client.RestTemplate com.example.dao.StudentDAOImpl.restTemplate)
- restTemplate
下面是我的代码:

我想因为我在StudenDAOImpl和CourseDAOImpl中有相同的@bean,因为如果我删除CourseDAOImpl编译成功,代码如下:

StudentDAOImpl代码:

@Service
public class StudentDAOImpl implements StudentDAO
{
    @Autowired
    private RestTemplate restTemplate;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
       return builder.build();
    }

    @Override
    public StudentModel selectStudent (String npm)
    {
        StudentModel student = restTemplate.getForObject(url+npm, StudentModel.class);
        return student;
    }

    @Override
    public List<StudentModel> selectAllStudents ()
    {
       return null;
    }

}
@Service
public class CourseDAOImpl implements CourseDAO {

    @Autowired
    private RestTemplate restTemplate;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }

    @Override
    public CourseModel selectCourse(String id) {
        CourseModel course = restTemplate.getForObject(urlCourse+id, CourseModel.class);
        return course;
    }

    @Override
    public List<CourseModel> selectAllCourses() {   
        return null;    
    }
}
@服务
公共类StudentDAOImpl实现StudentDAO
{
@自动连线
私有RestTemplate RestTemplate;
@豆子
公共RestTemplate RestTemplate(RestTemplateBuilder){
返回builder.build();
}
@凌驾
公共StudentModelSelectStudent(字符串npm)
{
StudentModel student=restemplate.getForObject(url+npm,StudentModel.class);
留学生;
}
@凌驾
公共列表选择所有学生()
{
返回null;
}
}
CourseDAOImpl代码:

@Service
public class StudentDAOImpl implements StudentDAO
{
    @Autowired
    private RestTemplate restTemplate;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
       return builder.build();
    }

    @Override
    public StudentModel selectStudent (String npm)
    {
        StudentModel student = restTemplate.getForObject(url+npm, StudentModel.class);
        return student;
    }

    @Override
    public List<StudentModel> selectAllStudents ()
    {
       return null;
    }

}
@Service
public class CourseDAOImpl implements CourseDAO {

    @Autowired
    private RestTemplate restTemplate;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }

    @Override
    public CourseModel selectCourse(String id) {
        CourseModel course = restTemplate.getForObject(urlCourse+id, CourseModel.class);
        return course;
    }

    @Override
    public List<CourseModel> selectAllCourses() {   
        return null;    
    }
}
@服务
公共类CourseDAOImpl实现CourseDAO{
@自动连线
私有RestTemplate RestTemplate;
@豆子
公共RestTemplate RestTemplate(RestTemplateBuilder){
返回builder.build();
}
@凌驾
公共课程模式selectCourse(字符串id){
CourseModel course=restTemplate.getForObject(urlCourse+id,CourseModel.class);
返回路线;
}
@凌驾
公共列表selectAllCourses(){
返回null;
}
}

有答案吗?非常感谢。

问题在于DAO中,您应该删除
@Bean
配置,并使每个DAO的配置如下所示

@Service
public class StudentDAOImpl implements StudentDAO
{
    @Autowired
    private RestTemplate restTemplate;

    @Override
    public StudentModel selectStudent (String npm)
    {
        StudentModel student = restTemplate.getForObject(url+npm, StudentModel.class);
        return student;
    }

    @Override
    public List<StudentModel> selectAllStudents ()
    {
       return null;
    }

}

删除所有
@Bean
方法,并将单个
@Bean
方法放在一个配置文件中。你能给我举个例子吗,我想我没有任何配置文件。是的,你有。您有一个用
@SpringBootApplication
注释的类,它是一个
@Configuration
类。只需将其添加到其中。编译成功后,在我的浏览器中只显示加载屏幕选项卡,而不是我视图中的结果。那么您可能还有另一个与此问题无关的问题。我需要将Config.java放在哪个文件夹中?我将CourseDAOImpl和StudentDAOImpl放在DAO FolderI中,我的意思是如何将Config.java包含到我的StudentDAOImpl中?我喜欢为Configs制作一个包,因此我有一个名为AppConfiguration的文件夹,并将我的Config放在那里,Spring将自动知道如何使用它,因为它将由Spring自动配置注释获取。你想吗给一个错误?仅仅说
不工作
是没有帮助的。