Does Java have a using statement that can be used when opening a session in hibernate?
In C# it is something like:
using (var session = new Session()
If you're interested in resource management, Project Lombok offers the @Cleanup annotation. Taken directly from their site:
You can use
@Cleanupto ensure a given resource is automatically cleaned up before the code execution path exits your current scope. You do this by annotating any local variable declaration with the@Cleanupannotation like so:
@Cleanup InputStream in = new FileInputStream("some/file");As a result, at the end of the scope you're in,
in.close()is called. This call is guaranteed to run by way of a try/finally construct. Look at the example below to see how this works.If the type of object you'd like to cleanup does not have a
close()method, but some other no-argument method, you can specify the name of this method like so:
@Cleanup("dispose") org.eclipse.swt.widgets.CoolBar bar = new CoolBar(parent, 0);By default, the cleanup method is presumed to be
close(). A cleanup method that takes argument cannot be called via@Cleanup.
Vanilla Java
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
out.close();
}
} finally {
in.close();
}
}
}
With Lombok
import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}
}