@Autowire注入了bean(A)在当前类,但其他类需要调用这个A,报null异常,使用get获取bean为解决方案
问题背景
在做项目时,我在一个类中自动注入了A,另一个想通过当前类调用这个A,却出现null,感觉讲不清楚,我还是写一下错误示例
1 bean:B自动注入bean:A
@Service
public class B{
@Autowired
public A a;
}
2 想在另一个类C中调用A,但我注入的是bean:B
@Service
public class C{
@Autowired
B b;
public void getA(){
if( b.a != null ){
System.out.println("success");
}
}
}
3 但是这个结果是a为空,并没有被调用过来,查阅了一些资料
- 在普通Java类中使用service或者dao就会报空指针异常,因为这个普通类不在Spring的管理下,所以不能使用Spring来注入
- 虽然现在不是普通类,b确实已经注入到C里面了,但a是注入在b中,由spring管理,a不属于b的属性,使用并不能直接被调用
解决方案
1 使用get方式去直接取a这个对象来使用,不通过spring获取
@Service
public class B{
@Autowired
A a;
public A getA(){
return a;
}
}
@Service
public class C{
@Autowired
B b;
public void getA(){
A a = b.getA();
if( a != null ){
System.out.println("success");
}
}
}
2 这个是时候就获取成功了,打印success
心得
项目中做着做着就会遇见莫名其妙的问题,说到底还是对源码不太熟悉,ahahah
- 在普通Java类中使用service或者dao就会报空指针异常,因为这个普通类不在Spring的管理下,所以不能使用Spring来注入
- 虽然现在不是普通类,b确实已经注入到C里面了,但a是注入在b中,由spring管理,a不属于b的属性,使用并不能直接被调用
作为程序员第 88 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …