想要在项目启动时初始化一些静态变量(从数据库里查出来的)
首先想到了使用 static{ } 静态代码块, 但是静态代码块的执行顺序在 @Autowired注入的Service层之前。
也就是说要在静态代码块中 访问数据库, 但是 执行静态代码块中的代码时, @Autowired还没有注入进来, 会报NullPoint。
网上搜了一些解决办法, 以下办法可以解决, 其他的暂时没有试验:
private static List<ResourceEntity> resourceList = null; //初始化的全局静态变量
@Autowired
private ResourceService resourceServiceTemp;
private static ResourceService resourceService;
//字面上看, 这个注解的意思是在构造方法之后执行(还有个PreConstruct方法)
@PostConstruct
public void init() { //程序启动后会自动执行该方法
resourceService = resourceServiceTemp; //将注入的对象重新赋值给静态对象
resourceList = resourceService.findAll(); //在这里就可以调用Service的方法了
}