自定义实现FilterInvocationSecurityMetadataSource类时自动注入空指针异常

public class MyInvocationSecurityMetadataSourceService implements FilterInvocationSecurityMetadataSource {
	
	@Autowired
	private IResourceDao resourceDao;
	
	//<资源,权限列表>存储所有资源与权限
	private static Map> resourceMap = null;
	
	public MyInvocationSecurityMetadataSourceService() {
		resourceMap = new HashMap<>();
		loadResourcePermission();
	}

	/**
	 * 加载资源权限
	 */
	private void loadResourcePermission() {
		List resources = resourceDao.getAll();//此处会报空指针异常
		
	}

	@Override
	public Collection getAllConfigAttributes() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Collection getAttributes(Object object) throws IllegalArgumentException {
		
		return null;
	}

	@Override
	public boolean supports(Class arg0) {
		// TODO Auto-generated method stub
		return true;
	}

}

空指针异常原因在于spring 注入时机发生在构造方法之后。

解决方法:

@Override
public Collection getAttributes(Object object) throws IllegalArgumentException {
	if(resourceMap.size() == 0) {
		loadResourcePermission();
	}
	//……
	return null;
}

你可能感兴趣的:(java,环境搭建)