org.hibernate.util.ConfigHelper.java

该类为hibernate资源加载工具类,在资源加载过程中,用到JDK的三种类加载类

1. 当前线程类加载器

    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();

2. 当前类加载器

    ClassLoader contextClassLoader = ConfigHelper.class.getClassLoader();

3. 系统类加载器

    ClassLoader contextClassLoader = ClassLoader.getSystemClassLoader()

 

在这里按照1、2、3依次加载,如果当前线程类加载器加载成功,则直接返回.........

 

在该类中用到一个类org.hibernate.cfg.Environment.java,从名称可以看到该类为hibernate环境相关的处理

 


package org.hibernate.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Environment;

/**
 * A simple class to centralize logic needed to locate config files on the system.
 *
 * @author Steve
 */
public final class ConfigHelper {
 private static final Log log = LogFactory.getLog(ConfigHelper.class);

 /** Try to locate a local URL representing the incoming path.  The first attempt
  * assumes that the incoming path is an actual URL string (file://, etc).  If this
  * does not work, then the next attempts try to locate this UURL as a java system
  * resource.
  *
  * @param path The path representing the config location.
  * @return An appropriate URL or null.
  */
 public static final URL locateConfig(final String path) {
  try {
   return new URL(path);
  }
  catch(MalformedURLException e) {
   return findAsResource(path);
  }
 }

 /**
  * Try to locate a local URL representing the incoming path. 
  * This method <b>only</b> attempts to locate this URL as a
  * java system resource.
  *
  * @param path The path representing the config location.
  * @return An appropriate URL or null.
  */
 public static final URL findAsResource(final String path) {
  URL url = null;

  // First, try to locate this resource through the current
  // context classloader.
  ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
  if (contextClassLoader!=null) {
   url = contextClassLoader.getResource(path);
  }
  if (url != null)
   return url;

  // Next, try to locate this resource through this class's classloader
  url = ConfigHelper.class.getClassLoader().getResource(path);
  if (url != null)
   return url;

  // Next, try to locate this resource through the system classloader
  url = ClassLoader.getSystemClassLoader().getResource(path);

  // Anywhere else we should look?
  return url;
 }

 /** Open an InputStream to the URL represented by the incoming path.  First makes a call
  * to {@link #locateConfig(java.lang.String)} in order to find an appropriate URL.
  * {@link java.net.URL#openStream()} is then called to obtain the stream.
  *
  * @param path The path representing the config location.
  * @return An input stream to the requested config resource.
  * @throws HibernateException Unable to open stream to that resource.
  */
 public static final InputStream getConfigStream(final String path) throws HibernateException {
  final URL url = ConfigHelper.locateConfig(path);

  if (url == null) {
   String msg = "Unable to locate config file: " + path;
   log.fatal(msg);
   throw new HibernateException(msg);
  }

  try {
   return url.openStream();
        }
  catch(IOException e) {
         throw new HibernateException("Unable to open config file: " + path, e);
        }
 }

 /** Open an Reader to the URL represented by the incoming path.  First makes a call
  * to {@link #locateConfig(java.lang.String)} in order to find an appropriate URL.
  * {@link java.net.URL#openStream()} is then called to obtain a stream, which is then
  * wrapped in a Reader.
  *
  * @param path The path representing the config location.
  * @return An input stream to the requested config resource.
  * @throws HibernateException Unable to open reader to that resource.
  */
 public static final Reader getConfigStreamReader(final String path) throws HibernateException {
  return new InputStreamReader( getConfigStream(path) );
 }

 /** Loads a properties instance based on the data at the incoming config location.
  *
  * @param path The path representing the config location.
  * @return The loaded properties instance.
  * @throws HibernateException Unable to load properties from that resource.
  */
 public static final Properties getConfigProperties(String path) throws HibernateException {
  try {
   Properties properties = new Properties();
   properties.load( getConfigStream(path) );
   return properties;
  }
  catch(IOException e) {
   throw new HibernateException("Unable to load properties from specified config file: " + path, e);
  }
 }
 
 private ConfigHelper() {}

 public static InputStream getResourceAsStream(String resource) {
  String stripped = resource.startsWith("/") ?
    resource.substring(1) : resource;
 
  InputStream stream = null;
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  if (classLoader!=null) {
   stream = classLoader.getResourceAsStream( stripped );
  }
  if ( stream == null ) {
   Environment.class.getResourceAsStream( resource );
  }
  if ( stream == null ) {
   stream = Environment.class.getClassLoader().getResourceAsStream( stripped );
  }
  if ( stream == null ) {
   throw new HibernateException( resource + " not found" );
  }
  return stream;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值