问题描述
1、我需要在一个类A中调用另一个类B的方法
2、另一个类B是注入Autowired注解,方法里面使用了Autowired注解的类
3、如果直接是new 类名().方法() 会报错,报空指针异常
解决方案
以下的所有操作都是对于注入Autowired注解的B类的操作,不是A类
1、在B类上加入@Component注解
2、在类里申明该类的静态变量 private static B b1;
3、初始化赋值
写一个方法,用@PostConstruct注解,这个很重要,不然不行
在这个方法里面把this指向我们申明的静态类类型的变量fc,然后把this.被Autowired的bean类赋值给fc.被Autowired;
@PostConstruct
public void init() {
fc = this;
fc.us = this.us;
fc.as=this.as;
}
4、B类中其他用到该类的注解类的方法,都用fc.us代替us
到这里就可以了,现在在A类中调用B类的方法就不会报错了!
总结
一般情况下我们访问B类是通过前端的方式直接访问的,此时this就代表该类
但通过一个类A调用B的方式很少,这种直接new出来的就不一样,this就变了,不再是B类,而是A类了;