jfinal(2)—JFinalConfig配置类

1.0概述

基于JFinal的web项目需要创建一个继承自JFinalConfig类的子类,该类用于对整个web项目进行配置。
JFinalConfig子类需要实现六个抽象方法,如下所示:

public class DemoConfig extends JFinalConfig {
    
    
    public void configConstant(Constants me) {
    
    }
    public void configRoute(Routes me) {
    
    }
    public void configEngine(Engine me) {
    
    }
    public void configPlugin(Plugins me) {
    
    }
    public void configInterceptor(Interceptors me) {
    
    }
    public void configHandler(Handlers me) {
    
    }
}

1.1 configConstant(…)

此方法用来配置JFinal常量值,如开发模式常量devMode的配置,如下代码是一些常用的配置(先了解即可):

public void configConstant(Constants me) {
    
    
    // 配置开发模式,true 值为开发模式
    // 在开发模式下,JFinal会对每次请求输出报告,如输出本次请求的URL、Controller、Method以及请求所携带的参数。
    me.setDevMode(true);
    me.setViewType(ViewType.JFINAL_TEMPLATE);// 配置视图类型,默认使用 jfinal enjoy 模板引擎
    
    // 配置 aop 代理使用 cglib,否则将使用 jfinal 默认的动态编译代理方案
    me.setToCglibProxyFactory();
    
    // 配置依赖注入
    me.setInjectDependency(true);
    
    // 配置依赖注入时,是否对被注入类的超类进行注入
    me.setInjectSuperClass(false);
    
    // 配置为 slf4j 日志系统,否则默认将使用 log4j
    // 还可以通过 me.setLogFactory(...) 配置为自行扩展的日志系统实现类
    me.setToSlf4jLogFactory();
    
    // 设置 Json 转换工厂实现类,更多说明见第 12 章
    me.setJsonFactory(new MixedJsonFactory());
    
    // 配置视图类型,默认使用 jfinal enjoy 模板引擎
    me.setViewType(ViewType.JFINAL_TEMPLATE);
    
    // 配置基础下载路径,默认为 webapp 下的 download
    me.setBaseDownloadPath(...);
    
    // 配置基础上传路径,默认为 webapp 下的 upload
    me.setBaseUploadPath(...);
    
    // 配置 404、500 页面
    me.setError404View("/common/404.html");
    me.setError500View("/common/500.html");    
}

1.2 configRoute(…)路由配置

public void configRoute(Routes me) {
    
    
   
       // 添加路由
    me.add("/hello", HelloController.class);
    
   //路由拆分   多人分工,或者不同功能
   me.add(new RouteWangYuNan());
   
   // 如果要将控制器超类中的 public 方法映射为 action 配置成 true,一般不用配置
    me.setMappingSuperClass(false);
    
    // 配置 baseViewPath,可以让 render(...) 参数省去 baseViewPath 这部分前缀
    me.setBaseViewPath("/view");
    
    // 配置作用于该 Routes 对象内配置的所有 Controller 的拦截器
    me.addInterceptor(new FrontInterceptor());
}

1、视图路径

视图路径的规则如下:finalView = baseViewPath + viewPath + view

  • baseViewPath:视图的跟路径,在configRoute中通过setBaseViewPath设置;
  • viewPath:视图的相对路径,在配置controller时第三个参数指定,不指定时默认是controllerKey;
  • view:视图名称,controller中返回时指定的名称

在这里插入图片描述
2、路由配置api

Routes 类中添加路由的方法有两个:

public Routes add(String controllerKey, Class<? extends Controller> controllerClass, String viewPath)
public Routes add(String controllerKey, Class<? extends Controller> controllerClass)

第一个参数 controllerKey 是指访问某个 Controller 所需要的一个字符串,该字符串唯一对应一个 Controller,controllerKey仅能定位到Controller。

第二个参数 controllerClass 是该 controllerKey 所对应到的 Controller 。

第三个参数viewPath是指该Controller返回的视图的相对路径(该参数具体细节将在Controller相关章节中给出)。当viewPath未指定时默认值为controllerKey。

1.3 configPlugin(…)数据库插件

此方法用来配置JFinal的Plugin,如下代码配置了Druid数据库连接池插件与ActiveRecord数据库访问插件。通过以下的配置,可以在应用中使用ActiveRecord非常方便地操作数据库

public void configPlugin(Plugins me) {
    
    
    DruidPlugin dp = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"));//配置阿里Druid数据源
    me.add(dp);
    
    ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);配置ActiveRecord插件!(每个数据库一个独立的)
    me.add(arp);

}

1.4 configInterceptor(…)拦截器

public void configInterceptor(Interceptors me) {
    
    
    // 以下两行代码配置作用于控制层的全局拦截器
    me.add(new AuthInterceptor());
    me.addGlobalActionInterceptor(new AaaInterceptor());
    
    // 以下一行代码配置业务层全局拦截器
    me.addGlobalServiceInterceptor(new BbbInterceptor());
}

以上 me.add(…) 与 me.addGlobalActionInterceptor(…) 两个方法是完全等价的,都是配置拦截所有 Controller 中 action 方法的拦截器。而 me.addGlobalServiceInterceptor(…) 配置的拦截器将拦截业务层所有 public 方法。

注意:以上描述中所谓的 “业务层” 本质上是指除了 “控制层” 以外的含义,不一定要求是业务层,也可以是一个除了 controller 以外的任何一个类。

1.5 configHandler(…)过滤器

public void configHandler(Handlers me) {
    
    
    me.add(new ResourceHandler());
}

此方法用来配置JFinal的Handler,如下代码配置了名为ResourceHandler的处理器,Handler可以接管所有web请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。

1.6 onStart()、onStop() 回调配置

在 JFinalConfig 继承类中可以添加 onStart() 与 onStop(),JFinal 会在系统启动完成之后以及系统关闭之前分别回调这两个方法:

// 系统启动完成后回调
public void onStart() {
    
    
}
 
// 系统关闭之前回调
public void onStop() {
    
    
}

这两个方法可以很方便地在项目启动后与关闭前让开发者有机会进行额外操作,如在系统启动后创建调度线程或在系统关闭前写回缓存。

注意:jfinal 3.6 版本之前这两个方法名为:afterJFinalStart() 与 beforeJFinalStop()。为减少记忆成本、代码输入量以及输入手误的概率,jfinal 3.6 版本改为了目前更简短的方法名。老方法名仍然被保留,仍然可以使用,方便老项目升级到 jfinal 最新版本。

1.7 PropKit 读取键值对配置

PropKit工具类用来读取外部键值对配置文件,PropKit可以极度方便地在系统任意时空使用,配置文件的格式如下:

配置文件路径可以是工程内的文件,也可以是任意可读路径的文件。工程内的配置文件放在resources目录下即可

jdbcUrl=jdbc:mysql://localhost:3306/partners
jdbcUrl1=jdbc:mysql://localhost:3306/student
jdbcUrl2=jdbc:mysql://localhost:3306/teacher
user=root
password=root
## 开发者模式
devMode=true

读取方式:

public void configConstant(Constants me) {
    
    
		//第一次使用use加载的配置将成为主配置,可以通过PropKit.get(...)直接取值
		PropKit.use("db.properties");
		//当配置文件中没有devMode这个配置时,就使用后面这个默认值
		me.setDevMode(PropKit.getBoolean("devMode", false));

		//可以获取的类型值String、int、long、boolean.
		PropKit.getBoolean("dev");
		PropKit.getInt("count");
	}

首次加载和非首次加载:两者唯一区别在于获取参数值的方式:首次加载的配置文件中
的值可以直接通过PropKit.get方法获取参数值,因为首次加载的配置文件会成为主配置;
而非首次加载的获取配置值时需要先使用use方法再使用get方法,或者先获取一个Prop对
象。

//首次加载的配置文件
PropKit.use("propkit.txt");
PropKit.get("fileName")
//非首次加载的配置文件
PropKit.use("propkit.propties");
PropKit.use("propkit.propties").get("fileName");
Prop p = PropKit.use("propkit.propties");
p.get("fileName");

猜你喜欢

转载自blog.csdn.net/qq_45928727/article/details/108895208