java.lang.AutoCloseable接口

137 阅读1分钟

以下是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

WechatIMG63.png

像这种在关闭前可能会保留资源(如文件或套接字句柄)的对象,AutoCloseable的close()方法可以在try-with-resources块中自动调用,这种结构避免了资源耗尽异常和其他错误