loadersmanager.java

来自「Jodd是一个开源的公用Java基础类库」· Java 代码 · 共 126 行

JAVA
126
字号
package jodd.bean;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import jodd.bean.loaders.MapLoader;
import jodd.bean.loaders.MultipartRequestLoader;
import jodd.bean.loaders.RequestLoader;
import jodd.bean.loaders.ResultSetLoader;

/**
 * Bean loaders manager.
 * <p>
 *
 * A bean loader is a class that "knows" how to populate a java bean from
 * given object. For example, the <code>Map</code> bean loader iterates given
 * <code>Map</code>, reads items and key/values pairs and sets beans property
 * that is named as items key with value of items value.
 * <p>
 *
 * This class registers few default loaders. Most of default loaders are made
 * for j2sdk classes. However, there are loaders that are made for j2ee
 * classes, that may not exists on client system. Therefore, during the
 * registration of default classes, <code>Class.forName</code> is used for
 * checking if certain class exists.
 */
public class LoadersManager {

	// ---------------------------------------------------------------- manager

	private static HashMap loaders = new HashMap();

	/**
	 * Returns the Map where all loaders are registered.
	 *
	 * @return loaders Map
	 */
	public static Map getMap() {
		return loaders;
	}

    static {
		registerDefaults();
    }

	/**
	 * Registers default set of loaders.
	 * <p>
	 *
	 * Important note: class that doesn'tcome with JDK is first being examined
	 * for existence. Examination is done with <code>Class.forName()</code>
	 * If class exists, it will be registered. If not, it will be skipped.
	 *
	 * @see #register
	 */
	public static void registerDefaults() {
		loaders.clear();
		register(java.util.Map.class, new MapLoader());
		register(java.sql.ResultSet.class, new ResultSetLoader());
		try {
			Class.forName("javax.servlet.http.HttpServletRequest");
			register(javax.servlet.http.HttpServletRequest.class, new RequestLoader());
			register(jodd.servlet.MultipartRequest.class, new MultipartRequestLoader());
		} catch (ClassNotFoundException cnfex) {
		}
	}

	/**
	 * Registers a loader for an objects of specific type.
	 *
	 * @param key    type of object that will be used by loader to populate bean.
	 * @param load   loader object that populates a bean.
	 *
	 * @see #registerDefaults
	 */
	public static void register(Class key, Loader load) {
		loaders.put(key, load);
	}


	/**
	 * Returns loader for the specific object type.
	 *
	 * @param key    type of object that will be used by loader to populate bean.
	 *
	 * @return loader for objects of specific type, <code>null</code> if no loader found.
	 * @see #get(Class key)
	 */
	public static Loader get(Class key) {
		return (Loader) loaders.get(key);
	}

	// ---------------------------------------------------------------- loader

	/**
	 * Performs more throughly search for bean loader. It examines all available
	 * loaders and returns the first that matches the object.
	 *
	 * @param obj
	 *
	 * @return loader
	 */
	public static Loader get(Object obj) {
		Class objclass = obj.getClass();
		Loader load = LoadersManager.get(objclass);
		if (load == null) {					// class not found, scan for instanceof matching
			Iterator it = LoadersManager.getMap().keySet().iterator();
			while (it.hasNext()) {
				Class key = (Class) it.next();
				if (key.isInstance(obj)) {
					load = LoadersManager.get(key);
					break;
				}
			}
		}
		return load;
	}






}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?