Routes表示的是JFinal框架所有的路由。可以自定义路由规则,比如利用注解的自动扫描路由器;或者自己定义前端和后端的路由器。
Routes在Config类中定义了一个空的Routes对象,这个对象在configJFinal方法中被传入configRoute方法。
static void configJFinal(JFinalConfig jfinalConfig) {configJFinal方法在JFinal的init方法中被调用
jfinalConfig.configConstant(constants);initLoggerFactory();
<strong>jfinalConfig.configRoute(routes);</strong>
jfinalConfig.configPlugin(plugins);startPlugins();// very important!!!
jfinalConfig.configInterceptor(interceptors);
jfinalConfig.configHandler(handlers);
}
<pre name="code" class="html">boolean init(JFinalConfig jfinalConfig, ServletContext servletContext) {
this.servletContext = servletContext;
this.contextPath = servletContext.getContextPath();
initPathUtil();
<strong>Config.configJFinal(jfinalConfig);// start plugin and init logger factory in this method</strong>
constants = Config.getConstants();
initActionMapping();
initHandler();
initRender();
initOreillyCos();
initTokenManager();
return true;
}
而这个JFinalConfig就是我们需要继承的抽象类,它有个方法就是
public abstract void configRoute(Routes me);我们在我们的继承类中可以调用Routes的
public Routes add(String controllerkey, Class<? extends Controller> controllerClass) {方法添加路由,也可以调用
public Routes add(Routes routes) {添加我们自己的路由器,该方法中,首先会调用我们路由器的config(这是个抽象方法)方法,这样我们就能配置好我们的路由规则。
public Routes add(Routes routes) {在config方法中,我们可以调用
if (routes != null) {
<strong>routes.config();// very important!!!
map.putAll(routes.map);
viewPathMap.putAll(routes.viewPathMap);</strong>
}
return this;
}
public Routes add(String controllerkey, Class<? extends Controller> controllerClass) {等方法配置路由,这个路由从哪儿来,当然就是我们的事儿了。
下面以AutoBindRoutes为例,剖析一下。
在public class Config extends JFinalConfig{的
public abstract void configRoute(Routes me);方法中,me.add(new AutoBindRoutes());可以配置路由器。
而AutoBindRoutes 的主要代码为:
public class AutoBindRoutes extends Routes还有些其他的方法可以添加一些包、排除某些类或者包
public void config()
{
<strong> List controllerClasses = ClassSearcher.of(Controller.class).includeAllJarsInLib(this.includeAllJarsInLib).injars(this.includeJars).search();</strong>
ControllerBind controllerBind = null;
for (Class controller : controllerClasses)
controllerBind = (ControllerBind)controller.getAnnotation(ControllerBind.class);
。。。
<strong>add(controllerKey(controller), controller);</strong>
配置好路由之后,JFinal就知道所有的controllerKey和Controller之间的映射关系。