一般在Util等静态方法中调用Service或mapper,初始化后会出现空指针异常:java.lang.NullPointerException。
代码执行优先级的问题,在一个Java类中,存在着静态代码块,静态方法,构造函数,成员方法等等。不同形式的代码执行顺序不同:执行顺序优先级:静态代码块 > 静态方法 > 构造函数(此时通过@Autowired修饰的成员变量为null)> bean注入 > @PostConstruct注解的init函数
类上加入了 @Component注解 使得可以使用注解注入,并交由Sping容器管理。
使用自带注解@PostConstruct 注释到初始化方法中,并在该初始化方法中将注入的对象赋予静态成员变量。
@Component
public class TestUtil {private static TestUtil util;@Autowiredprivate TestService testService;@PostConstructpublic void init() {util = this;util.testService= this.testService;}public static void test() {util.testService.test();}> 打印输出结果:TestServiceClass@Service
class TestService{public void Test(){System.out.println("TestServiceClass");}
}