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