すべてのjarパッケージの下に指定されたファイルをロード

4207 ワード

すべてのjarパッケージの下に指定されたファイルをロードします.
例えばspringにMETA-INF/springをロードする.handlersロード
 
 
org.springframework.core.io.support.PropertiesLoaderUtils#loadAllProperties(java.lang.String, java.lang.ClassLoader)
    /**
     * Load all properties from the specified class path resource
     * (in ISO-8859-1 encoding), using the given class loader.
     * 

Merges properties if more than one resource of the same name * found in the class path. * @param resourceName the name of the class path resource * @param classLoader the ClassLoader to use for loading * (or {@code null} to use the default class loader) * @return the populated Properties instance * @throws IOException if loading failed

*/ public static Properties loadAllProperties(String resourceName, @Nullable ClassLoader classLoader) throws IOException { Assert.notNull(resourceName, "Resource name must not be null"); ClassLoader classLoaderToUse = classLoader; if (classLoaderToUse == null) { classLoaderToUse = ClassUtils.getDefaultClassLoader(); } Enumeration urls = (classLoaderToUse != null ? classLoaderToUse.getResources(resourceName) : ClassLoader.getSystemResources(resourceName)); Properties props = new Properties(); while (urls.hasMoreElements()) { URL url = urls.nextElement(); URLConnection con = url.openConnection(); ResourceUtils.useCachesIfNecessary(con); InputStream is = con.getInputStream(); try { if (resourceName.endsWith(XML_FILE_EXTENSION)) { props.loadFromXML(is); } else { props.load(is); } } finally { is.close(); } } return props; }

 
事例:
    public static void main(String[] args) {
        String handlerMappingsLocation = "META-INF/spring.handlers";
        try {
            Properties properties = PropertiesLoaderUtils.loadAllProperties(handlerMappingsLocation, BeanUtil.class.getClassLoader());
            Enumeration> enumeration = properties.propertyNames();
            while (enumeration.hasMoreElements()) {
                String key = (String) enumeration.nextElement();
                System.out.println(key);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 
コア構文:
ClassLoader.getSystemResources(resourceName)

 
転載先:https://www.cnblogs.com/hfultrastrong/p/10772654.html