There are several ways to load resources, each with a slightly different meaning -
ClassLoader::getSystemResource()
uses the system classloader. This uses the classpath that was used to start the program. If you are in a web container such as tomcat, this will NOT pick up resources from your WAR file.
Class<T>#getResource()
prepends the package name of the class to the resource name, and then delegates to its classloader. If your resources are stored in a package hierarchy that mirrors your classes, use this method.
ClassLoader#getResource()
delegates to its parent classloader. This will eventually search for the resource all the way upto the system classloader.
If you are confused, just stick to ClassLoader#getResource()
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…