static void configJFinal(JFinalConfig jfinalConfig) {
jfinalConfig.configConstant(constants); initLoggerFactory();
jfinalConfig.configRoute(routes);
jfinalConfig.configPlugin(plugins); startPlugins(); // very important!!!
jfinalConfig.configInterceptor(interceptors);
jfinalConfig.configHandler(handlers);
}
2. jfinalConfig.configConstant(constants);这句话就会调用我们的配置信息
/**
* 配置常量
*/
public void configConstant(Constants me) {
// 加载少量必要配置,随后可用getProperty(...)获取值
loadPropertyFile("a_little_config.txt");
me.setDevMode(getPropertyToBoolean("devMode", false));
}
3. 这句话的第一句代码loadPropertyFile("a_little_config.txt"); 会调用如下代码
/**
* Load property file
* Example: loadPropertyFile("db_username_pass.txt");
* @param file the file in WEB-INF directory
*/
public Properties loadPropertyFile(String file) {
if (StringKit.isBlank(file))
throw new IllegalArgumentException("Parameter of file can not be blank");
if (file.contains(".."))
throw new IllegalArgumentException("Parameter of file can not contains \"..\"");
InputStream inputStream = null;
String fullFile; // String fullFile = PathUtil.getWebRootPath() + file;
if (file.startsWith(File.separator))
fullFile = PathKit.getWebRootPath() + File.separator + "WEB-INF" + file;
else
fullFile = PathKit.getWebRootPath() + File.separator + "WEB-INF" + File.separator + file;
try {
inputStream = new FileInputStream(new File(fullFile));
Properties p = new Properties();
p.load(inputStream);
properties = p;
} catch (FileNotFoundException e) {
throw new IllegalArgumentException("Properties file not found: " + fullFile);
} catch (IOException e) {
throw new IllegalArgumentException("Properties file can not be loading: " + fullFile);
}
finally {
try {if (inputStream != null) inputStream.close();} catch (IOException e) {e.printStackTrace();}
}
if (properties == null)
throw new RuntimeException("Properties file loading failed: " + fullFile);
return properties;
}
3.从上面代码可以看出该配置文件a_little_config.txt一定要放在 WEB-INF文件下面
me.setDevMode(getPropertyToBoolean("devMode", false));
getPropertyToBoolean("devMode", false);
public Boolean getPropertyToBoolean(String key) {
checkPropertyLoading();
String resultStr = properties.getProperty(key);
Boolean resultBool = null;
if (resultStr != null) {
if (resultStr.trim().equalsIgnoreCase("true"))
resultBool = true;
else if (resultStr.trim().equalsIgnoreCase("false"))
resultBool = false;
}
return resultBool;
}
public Boolean getPropertyToBoolean(String key, boolean defaultValue) {
Boolean result = getPropertyToBoolean(key);
return result != null ? result : defaultValue;
}
4.initLoggerFactory();就是初始化logger,运用了工厂模式,有JdkLogger和Loger4jLogger,比较简单,大家有空可以好好学习
5.jfinalConfig.configRoute(routes);就是调用我们
/**
* 配置路由
*/
public void configRoute(Routes me) {
me.add("/", CommonController.class);
me.add("/blog", BlogController.class);
}
6.me.add会调用如下代码
private final Map<String, Class<? extends Controller>> map = new HashMap<String, Class<? extends Controller>>();
private final Map<String, String> viewPathMap = new HashMap<String, String>();
/**
* Add url mapping to controller. The view path is controllerKey
* @param controllerkey A key can find controller
* @param controllerClass Controller Class
*/
public Routes add(String controllerkey, Class<? extends Controller> controllerClass) {
return add(controllerkey, controllerClass, controllerkey);
}
/**
* Add route
* @param controllerKey A key can find controller
* @param controllerClass Controller Class
* @param viewPath View path for this Controller
*/
public Routes add(String controllerKey, Class<? extends Controller> controllerClass, String viewPath) {
if (controllerKey == null)
throw new IllegalArgumentException("The controllerKey can not be null");
// if (controllerKey.indexOf(".") != -1)
// throw new IllegalArgumentException("The controllerKey can not contain dot character: \".\"");
controllerKey = controllerKey.trim();
if ("".equals(controllerKey))
throw new IllegalArgumentException("The controllerKey can not be blank");
if (controllerClass == null)
throw new IllegalArgumentException("The controllerClass can not be null");
if (map.containsKey(controllerKey))
throw new IllegalArgumentException("The controllerKey already exists");
if (!controllerKey.startsWith("/"))
controllerKey = "/" + controllerKey;
map.put(controllerKey, controllerClass);
if (viewPath == null || "".equals(viewPath.trim())) // view path is controllerKey by default
viewPath = controllerKey;
viewPath = viewPath.trim();
if (!viewPath.startsWith("/")) // "/" added to prefix
viewPath = "/" + viewPath;
if (!viewPath.endsWith("/")) // "/" added to postfix
viewPath = viewPath + "/";
if (baseViewPath != null) // support baseViewPath
viewPath = baseViewPath + viewPath;
viewPathMap.put(controllerKey, viewPath);
return this;
}