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 + -
显示快捷键?