public class MyInvocationSecurityMetadataSourceService implements FilterInvocationSecurityMetadataSource {
@Autowired
private IResourceDao resourceDao;
//<资源,权限列表>存储所有资源与权限
private static Map<String, Collection<ConfigAttribute>> resourceMap = null;
public MyInvocationSecurityMetadataSourceService() {
resourceMap = new HashMap<>();
loadResourcePermission();
}
/**
* 加载资源权限
*/
private void loadResourcePermission() {
List<Resource> resources = resourceDao.getAll();//此处会报空指针异常
}
@Override
public Collection<ConfigAttribute> getAllConfigAttributes() {
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
return null;
}
@Override
public boolean supports(Class<?> arg0) {
// TODO Auto-generated method stub
return true;
}
}
空指针异常原因在于spring 注入时机发生在构造方法之后。
解决方法:
@Override
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
if(resourceMap.size() == 0) {
loadResourcePermission();
}
//……
return null;
}