无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。
Routes表示的是JFinal框架所有的路由。可以自定义路由规则,比如利用注解的自动扫描路由器;或者自己定义前端和后端的路由器。
Routes在Config类中定义了一个空的Routes对象,这个对象在configJFinal方法中被传入configRoute方法。
static void configJFinal(JFinalConfig jfinalConfig) {
jfinalConfig.configConstant(constants); initLoggerFactory();
<strong>jfinalConfig.configRoute(routes);</strong>
jfinalConfig.configPlugin(plugins); startPlugins(); // very important!!!
jfinalConfig.configInterceptor(interceptors);
jfinalConfig.configHandler(handlers);
}
configJFinal方法在JFinal的init方法中被调用
<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) {
if (routes != null) {
<strong>routes.config(); // very important!!!
map.putAll(routes.map);
viewPathMap.putAll(routes.viewPathMap);</strong>
}
return this;
}
在config方法中,我们可以调用
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之间的映射关系。