以下是spring的源码:
try (InputStream inputStream = encodedResource.getResource().getInputStream()) {
// org.xml.sax.InputSource
InputSource inputSource = new InputSource(inputStream);
if (encodedResource.getEncoding() != null) {
inputSource.setEncoding(encodedResource.getEncoding());
}
// 核心
return doLoadBeanDefinitions(inputSource, encodedResource.getResource());
}
catch (IOException ex) {
throw new BeanDefinitionStoreException(
"IOException parsing XML document from " + encodedResource.getResource(), ex);
}
finally {
currentResources.remove(encodedResource);
if (currentResources.isEmpty()) {
this.resourcesCurrentlyBeingLoaded.remove();
}
}
从java7开始,java中新增了一个接口java.lang.AutoCloseable
像这种在关闭前可能会保留资源(如文件或套接字句柄)的对象,AutoCloseable的close()方法可以在try-with-resources块中自动调用,这种结构避免了资源耗尽异常和其他错误