ActiveRecord初始化
activerecord是作为插件来支持jfinal webapp的,所以其初始化入口就在start(),此方法是在initPlugin()后startPlugin()时被调用的
startPlugins方法详情
private static void startPlugins() {
// 获取配置的plugins集合
List<IPlugin> pluginList = plugins.getPluginList();
if (pluginList == null)
return;
// IPlugin只有两个方法分别控制插件的开始和停止,此处应用了观察者模式来统一管理plugin的生命周期
for (IPlugin plugin : pluginList) {
try {
// process ActiveRecordPlugin devMode
if (plugin instanceof com.jfinal.plugin.activerecord.ActiveRecordPlugin) {
com.jfinal.plugin.activerecord.ActiveRecordPlugin arp = (com.jfinal.plugin.activerecord.ActiveRecordPlugin) plugin;
if (arp.getDevMode() == null)
arp.setDevMode(constants.getDevMode());
}
// 对于具体plugin的初始化,暂时不做深究
if (plugin.start() == false) {
String message = "Plugin start error: "
+ plugin.getClass().getName();
log.error(message);
throw new RuntimeException(message);
}
} catch (Exception e) {
String message = "Plugin start error: "
+ plugin.getClass().getName() + ". \n" + e.getMessage();
log.error(message, e);
throw new RuntimeException(message, e);
}
}
}
activerecord实例化
// process ActiveRecordPlugin devMode
if (plugin instanceof com.jfinal.plugin.activerecord.ActiveRecordPlugin) {
com.jfinal.plugin.activerecord.ActiveRecordPlugin arp = (com.jfinal.plugin.activerecord.ActiveRecordPlugin) plugin;
if (arp.getDevMode() == null)
arp.setDevMode(constants.getDevMode());
}
/**
* 配置插件
*/
public void configPlugin(Plugins me) {
// 配置C3p0数据库连接池插件
C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"),
getProperty("user"), getProp