弹簧靴中的圆形依赖性



我正在尝试在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;
    }
}

coursedaoimpl代码:

@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;    
    }
}

有答案吗?非常感谢。

问题是在您的daos中,您应该删除@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或入口点应用程序中您可以添加RESTTEMPLATE BEAN。例如,这里是config.java中的配置bean

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

最新更新