Давайте представим, что у нас есть два Closeable
бобы:Подходит ли весна? Закрытые бобы закрыты в правильном порядке?
@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
закрыт?
Почему существует заказ на уважение? Закрытие дважды не должно приводить к исключению в соответствии с контрактом ['close'] (https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html): * Если поток уже закрыто, тогда вызов этого метода не имеет эффекта. * – Tunaki
Давайте притворимся, что у вас есть компонент (например, 'Bean1'), который имеет член типа BufferedOutputStream и другой компонент, который зависит от него (например,' Bean2'). Если 'BufferOutputStream' Bean1' закрыт, а другой компонент предполагает, что он открыт и пытается писать на него, все может пойти не так (исключения выбраны и т. Д.). – Behrang