gpt4 book ai didi

java - Spring 是否确保 Closeable bean 以正确的顺序关闭?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:33 25 4
gpt4 key购买 nike

假设我们有两个 Closeable bean:

@Component
public class CloseableBean1 implements Closeable {

private BufferedOutputStream outputStream;

@Override
public void close() throws IOException {
try {
outputStream.close();
} catch (Exception e) {
// ignore e
}
}
}


@Component
public class CloseableBean2 implements Closeable {

@Autowired
private CloseableBean1 bean1;


@Override
public void close() throws IOException {
try {
bean1.close();
} catch (Exception e) {
// ignore e
}
}
}

Spring 是否确保先关闭CloseableBean2,然后再关闭CloseableBean1

最佳答案

文档中没有关于处理顺序的具体内容,但是......description depends-on 我们可以看到,depends-on 只有在 bean 没有明确依赖于另一个时才应该使用。需要注意的是,依赖 bean 总是会首先被销毁。

在您的例子中,bean CloseableBean2 总是 将首先被销毁,因为它包含对 CloseableBean 的显式依赖。


我更愿意提供额外的保护。像这样的东西:

@Component
public class CloseableBean1 implements Closeable {

private boolean closed = false;

@Override
public void close() throws IOException {
if(closed) return;
outputStream.close();
closed=true;
}
}

官方文档recommend我们:

...and to internally mark the Closeable as closed, prior to throwing the IOException.

这种方法有助于避免在已经关闭的流上意外重复调用 close()。但是,如果在第一次调用 close() 时发生异常,我们将能够处理它。

关于java - Spring 是否确保 Closeable bean 以正确的顺序关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36219056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com