我试图在我的 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;
}
}
有答案吗?非常感谢。
最佳答案
问题出在您的 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 或入口点应用程序中,您可以添加restTemplate bean。例如这里是 Config.java 中的一个配置 Bean
@Configuration
public class Config {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
关于java - Spring Boot 中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706287/