有一次在项目中有一个工具类的属性是static, 我造仿别人的注入方式也试着给我自己在工具类里定义的变量进行注入,结果发现变量还是NULL,倒腾了半天都没倒腾出来。
正好在下班的时候灵光一闪,发现是不是因为变量是static的原因导致spring忽略掉次变量。
因为静态变量不属于对象,只属于类,也就是说在类被加载字节码的时候变量已经初始化了,也就是给该变量分配内存了,导致spring忽略静态变量。
解决方法是:
private static ISysUserService service;
private static ISysResourceService sourceService;
private static ISysParamService sysParamService;
@Autowired
public void setService(ISysUserService service) {
UserResource.service = service;
}
@Autowired
public void setSourceService(ISysResourceService sourceService) {
UserResource.sourceService = sourceService;
}
@Autowired
public void setSysParamService(ISysParamService sysParamService) {
UserResource.sysParamService = sysParamService;
}
也就是用非静态的setter来进行注入,千万不能用static的setter,否则还是不能注入成功。