1、场景
有时候为了美观(比如isXXX返回boolean),会想把方法写成静态的,但是方法中又需要调用service或者dao去关联数据,如果直接像下面这么写,会注入失败,获取到的是null
@Autowired
private SysRoleService sysRole;
public static boolean isSuperAdmin() {
UserDetail user = getUser();
...
List<Long> roleIdList = sysRoleUserService.getRoleIdList(user.getId());
...
return false;
}
2、解决方法
用init方法来过度一下,达到传递的效果
@Component
public class SecurityUser {
@Autowired
private SysRoleUserService sysRoleUser;
@Autowired
private SysRoleService sysRole;
private static SysRoleUserService sysRoleUserService;
private static SysRoleService sysRoleService;
@PostConstruct
public void init() {
sysRoleUserService = this.sysRoleUser;
sysRoleService = this.sysRole;
}
public static boolean isSuperAdmin() {
UserDetail user = getUser();
if (Constant.SuperAdmin.IS.getValue().equals(user.getSuperAdmin())) {
return true;
} else if (Constant.SuperAdmin.IS.getValue().equals(user.getSuperTenant())) {
return true;
} else {
List<Long> roleIdList = sysRoleUserService.getRoleIdList(user.getId());
List<SysRoleEntity> sysRoleEntities = sysRoleService.selectBatchIds(roleIdList);
...
return true;
}
return false;
}
}
- 如果涉及到@Value注入值得情况,也是同理
如果帮到你了,给个一键三连吧~
End.