这个报错的原因多种多样,此文只记录我遇到的原因,原因是在@Bean注解的方法内又引入了使用@Autowired field方式注入的属性
伪代码描述:老师类未纳入spring ioc管理,学生类纳入spirng ioc了,所以无法直接在老师类内用@autowired 注入学生类,而老师类的read()方法需要调用学生类的read()方法
class Class{
@Autowired
private Student student;
@Bean
public Teacher teacher() {
Teacher teacher= new Teacher (student);
return teacher;
}}
class Teacher {
private Student student;
public Teacher (Student student){
this.student=student;
}
public void read(){
student.read();
}
}
最终改造方法如下
class Class{
@Bean
public Teacher teacher() {
Teacher teacher= new Teacher ();
return teacher;
}}
class Teacher {
void read(){
SpringUtil.getBean(Student.Class).read();
}
}
其中SpringUtil 是封装的工具类,原理就是从spring的上下文中获取,实现方法很多,不放出具体细节