JFinal如何配置springPlug?

jfinal 是 orm+mvc 而且有易与扩展的render plugin等机制。

JFinal框架也整合了Spring框架,下面实现JFinal怎么去配置Spring框架。在JFinal中整合Spring使用到的类是SpringPlugin和IocInterceptor类。

Eclipse IDE for Java EE Developers 中

1、创建 Dynamic Web Project

2、修改 Default Output Folder,推荐输入 WebRootWEB-INFclasses

特别注意:此处的  Default out folder 必须要与  WebRootWEB-INFclasses  目录
完全一致才可以使用  JFinal  集成的  Jetty  来启动项目。

3、修改 Content directory,推荐输入 WebRoot

注 意 : 此 处 也 可 以 使 用 默 认 值 WebContent ,   但 上 一 步 中 的
WebRootWEB-INFclasses 则需要改成 WebContentWEB-INFclasses 才能对应上。 

4、去官网下载最新的jar包(我这是JFinal-lib-1.9)

把jetty-server-8.1.8.jar 和JFinal-bin-1.4.jar放到项目 WEB-INFlib下,jetty-server-8.1.8.jar是开发时使用的运行环境,用tomact和生产环境下就不需要了

5、添加到web.xml

 

<filter><filter-name>jfinal</filter-name><filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param><param-name>configClass</param-name><param-value>demo.DemoConfig</param-value>
</init-param></filter><filter-mapping><filter-name>jfinal</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

 

6、在项目 src 目录下创建 demo 包,并在 demo 包下创建 DemoConfig 文件,   内容如下:

 

package demo;import com.jfinal.config.*;public class DemoConfig extends JFinalConfig {public void configConstant(Constants me) {
me.setDevMode(true);
}public void configRoute(Routes me) {
me.add("/hello", HelloController.class);
}public void configPlugin(Plugins me) {}public void configInterceptor(Interceptors me) {}public void configHandler(Handlers me) {}
}

 

注意:DemoConfig.java 文件所在的包以及自身文件名必须与 web.xml 中的param-value 标签内的配置相一致(在本例中该配置为 demo.DemoConfig)。

在 demo 包下创建 HelloController 类文件,  内容如下:

 

package demo;import com.jfinal.core.Controller;public class HelloController extends Controller {public void index() {
renderText("Hello JFinal World.");
}
}

 

6、右击项目名

选中com.jfinal.core.JFinal  ok
7、浏览器输入http://localhost/hello输出内容为 Hello JFinal World 证明项目框架搭建完成。

注意:在 tomcat 下开发或运行项目时,需要先删除  jetty-server-xxx.jar 这个包,否则会引起冲突。

(抄袭官网api,罪过罪过....)

jfinal真的挺简单,迅速,强大的一个框架,没有ssh的N多xml配置文件,后面做个简单的学生信息管理,配合FreeMarker

jfinal集成spring

SpringIplugin类:

SpringPlugin 是作为 JFinal 的 Plugin 而存在的,所以使用时需要在 JFinalConfig 中配置SpringPlugin,以下是 Plugin 配置示例代码:

 

@Override  public void configPlugin(Plugins me) {
<span style="white-space:pre">		</span>//配置Spring挂件    me.add(new SpringPlugin());  }

 

若创建 SpringPlugin 对 象 时 未 指 定 构 造 方 法 中 的 形 参 , SpringPlugin 将 自动去WebRoot/WEB-INF 目录下寻找 applicationContext.xml 作为配置文件进行初始化。您还可以通过另外两个构造方法指定配置文件或 ApplicationContext 对象。

以前学习Spring养成了习惯将Spring的配置放在src下,这里我还是放在src的spring包中,如下:

 

@Override  public void configPlugin(Plugins me) {    //配置Spring挂件, 自动找spring包中所有的xml配置文件    me.add(new SpringPlugin("classpath*:spring/*.xml"));  }

 

IocInterceptor类:

 

IocInterceptor 拦截 action 并对其进行依赖注入,以下是示例代码:

 

package com.tenghu.core.controller;import java.util.List;import com.jfinal.aop.Before;
import com.jfinal.core.Controller;import com.jfinal.plugin.spring.Inject;import com.jfinal.plugin.spring.IocInterceptor;import com.tenghu.core.model.Users;
import com.tenghu.core.service.LoginService;import com.tenghu.core.validator.LoginValidator;
@Before(IocInterceptor.class)public class IndexController extends Controller{  @Inject.BY_NAME  private LoginService loginService;  public void index(
){    List<Users> testList=Users.dao.find("select * from users");    setAttr("testList", testList);    render("login.html");  }  
  public void login(){    String username=getPara("name");    String password=getPara("password"); 
   if(loginService.login(username, password)){      renderText("登录成功");    }else{      renderText("登录失败");    }  }
}

 

上例将对 loginService 按属性名称进行注入。注解@Inject.BY_NAME 按属性名进行注入,@Inject.BY_TYPE 按类型进行注入。不指定注入类型时将不会进行注入。

登录服务接口与实现类:

 

package com.tenghu.core.service;public interface LoginService {  /**   * 登录处理   */  public boolean login(String username,String password);
}
package com.tenghu.core.service.impl;import com.tenghu.core.service.LoginService;public class LoginServiceImpl implements LoginService
{  /**   * 登录处理   */  public boolean login(String username, String password) {    if("admin".equals(username)&&"admin".equals(password))
{      return true;    }    return false;  }
}

 

Spring配置文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"   
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
 xmlns:aop="http://www.springframework.org/schema/aop"   
 xmlns:tx="http://www.springframework.org/schema/tx"  
  xsi:schemaLocation="      http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
  http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
   http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
<span style="white-space:pre">
			default-autowire="byName"</span>>
  <bean id="loginService" class="com.tenghu.core.service.impl.LoginServiceImpl"/></beans>

 

配置完成

JFinal Dao 集成到 Spring

最近公司其它部门的同事还有朋友都表示对jfinal有很大的兴趣,我发现最主要的一点是jfianl极简风格和牛x的开发效率让大家为之兴奋,尤其是jfinal的dao设计。至于没有在新项目中进行尝试,因为好多项目需要对事务尤其是多库事务上进行处理,而这点也让大家犯难了起来。公司目前的项目是基于springmvc+mybatis,所以我将jfinal dao 集成到spring上,利用spring 强大的事务抽象能力解决事务难题。

      不说了,先上代码。。

?

1
2
3
4
5
6
7
8
9
10
11
12
    <bean id="jFinalDaoConfig" class="com.jfinal.plugin.activerecord.JFinalDaoConfig" init-method="init">
        <property name="configName" value="main" />
        <property name="dataSource" ref="dataSource"/>
        <property name="dialect">
             <bean class="com.jfinal.plugin.activerecord.dialect.AnsiSqlDialect"/>
        </property>
        <property name="modelsClasses">
            <set>
                 <value>test.AAA</value>
            </set>
        </property>        
    </bean>

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public class JFinalDaoConfig {
    protected final Logger log = Logger.getLogger(getClass());
    public void init(){
        if (null == dialect) {
            log.warn("Using mysql dialect as default.");
            dialect = new MysqlDialect();//默认mysql方言
        }
        //config与dataSource相关绑定
        Config config = new Config(configName, dataSource, dialect);
        DbKit.addConfig(config);
        Iterator<Class<Model>> iterModel = modelsClasses.iterator();
        Class modelClass = null;
        while (iterModel.hasNext()) {
            modelClass = iterModel.next();
            Class superClass = modelClass.getSuperclass();
            if (null==superClass || superClass!=Model.class) {
                log.warn(modelClass + " should extends com.jfinal.plugin.activerecord.Model");
                continue;
            }
            DbKit.addModelToConfigMapping(modelClass, config);//model与config绑定
            TableBinding tb = (TableBinding) modelClass.getAnnotation(TableBinding.class);//获取model对应的表信息
           &nbnbsp;if (tb != null) {
                Table table = null;
                if (StrKit.notBlank(tb.pkName())) {
                    table = new Table(tb.tableName(), tb.pkName(), modelClass);
                } else {
                    table = new Table(tb.tableName(), modelClass);
                }
                tableList.add(table);
            }
        }
        if (!tableList.isEmpty()){
            TableBuilder.build(tableList, config);
        }
        Db.init();
    }
    private List<Table> tableList = new ArrayList<Table>();
    private String configName;
    private DataSource dataSource;
    private Dialect dialect;
    private Set<Class<Model>> modelsClasses;
    public void setConfigName(String configName) {
        if (configName == null) {
            throw new IllegalArgumentException("Config name can not be null");
        }
        this.configName = configName;
    }
    public void setDataSource(DataSource dataSource) {
        if (dataSource == null) {
            throw new IllegalArgumentException("DataSource can not be null");
        }
        this.dataSource = dataSource;
    }
    public void setDialect(Dialect dialect) {
        this.dialect = dialect;
    }
    public void setModelsClasses(Set<Class<Model>> modelsClasses) {
        this.modelsClasses = modelsClasses;
    }
}

    JFinalDaoConfig的作用就是将config与数据库绑定,模型与config进行绑定,这个类的作用我相信大家如果对jfinal比较熟悉,应该不难理解。

    jfianl Model、DbPro 的获取和释放连接采用了spring的DataSourceUtils进行替换

    //conn = config.getConnection();
       conn = DataSourceUtils.getConnection(config.getDataSource());

        JdbcUtils.closeStatement(pst);
        DataSourceUtils.releaseConnection(conn, config.getDataSource());

    由于jfianl某些类的可见性,JFinalDaoConfig需要放到com.jfinal.plugin.activerecord下

    这样就可以利用spring的事务和jfinal dao的方便性了。

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mybatis
, jfinal
, html、jfinal
, springmvc+mysql
, jetty
, package control
, jfinal 路径
, jfinal开发问题
, mybatis问题
, 配置
, import
, public
, config
void
jfinal和spring哪个好、jfinal spring、jfinal springmvc比较、spring boot jfinal、jfinal spring 集成,以便于您获取更多的相关知识。

时间: 2024-10-27 19:44:07

JFinal如何配置springPlug?的相关文章

zrlog 1.7 发布,基于 JFinal/简洁好用的开源博客

ZrLog是使用Java开发的博客/CMS程序,具有简约,易用,组件化,内存占用低等特点.自带Markdown编辑器,让更多的精力放在写作上,而不是花费大量时间在学习程序的使用上. 距离上一个版本的发布又快半年了,这个版本主要是修复bug,增强程序的稳定性,以及升级JFinal到3.1,Java版本提升至1.7,同时将原有的开源协议由GPLv2改为更为宽松的Apache. v1.5以后版本可通过后台管理提供系统更新直接进行升级,windows环境可能会有升级失败的情况,可尝试手动解压下升级过程中

JFinal项目用tomcat启动 报错 在线等 求解答

问题描述 严重:ExceptionstartingfilterpageCacheFilterjavax.servlet.ServletException:Couldnotinitialiseservletfilter.atnet.sf.ehcache.constructs.web.filter.Filter.init(Filter.java:192)atorg.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFi

JFinal开发环境搭建,JFinal开发案例

 JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所有优势的同时再拥有 ruby.python.php 等动态语言的开发效率! JFinal 有如下主要特点:l  MVC 架构,设计精巧,使用简单l  遵循 COC 原则,零配置,无 xmll  独创 Db + Record 模式,灵活便利l  ActiveRecord 支持,使数据库开发极致快速l 

JFinal Weixin 1.9 发布,微信极速 SDK

JFinal Weixin 1.9 正式发布!离上一次 JFinal weixin 1.8 发布,已经过去 10 个月.在过去的 10 个月时间里 JFinal Weixin 紧随微信公众平台的演化,不断增加了新的 API,同时也在不断完善原有 API,力求打造一个完备的微信公众平台 SDK,让开发更快速.更开心! JFinal Weixin 1.9 共有 18 项新增与改进,新增功能主要有:小程序接口.微信智能硬件接口.门店接口.黑名单接口.上传图文消息素材接口.模板管理接口.高清语音素材获取

jfinal手册第一个快速入门的程序,如何通过tomcat发布到网上正常显示

问题描述 jfinal手册第一个快速入门的程序,如何通过tomcat发布到网上正常显示 我用的是java EE编程的 这是主程序 package projectTest; import com.jfinal.config.Constants; import com.jfinal.config.Handlers; import com.jfinal.config.Interceptors; import com.jfinal.config.JFinalConfig; import com.jfin

基于jfinal Template的Shiro 标签

jfinal template 经过 3.0.3.1 两个版本的迭代,已经非常稳定优秀了,所以我从传统的jsp 迁移到了jf template ,jsp中使用shiro 的标签库,可以很方便的实现权限的控制例如: <shiro:guest> 用户未登录状态显示 </shiro:guest> <shiro:user> 欢迎[<shiro:principal/>]登录 </shiro:user> 结合jf模板灵活指令扩展,来实现这么一套标签非常简单.

PHP开发环境配置(含加密程序)

程序|加密 看到文章的题目,不知道大家还有没有兴趣看下去."PHP开发环境配置"~~这个题目就好像在大街上随便问一个人:"你喜欢吃什么?" 一样,答案当然是多种多样的.下面就来说说我个人的看法吧,各位高手不要见笑.但是我想这篇文章对于各位初学者来说还是有一定借鉴意义的.OK.Let's begin~ 在机器上配置好了开发环境,想必各位初哥初姐手痒着要写程序了吧?但是写在那里呢? 对于刚开始学习PHP的朋友来说,首先要知道,在各类PHP开发工具中还没有一个象Micro

PHP开发框架laravel安装与配置教程

 Laravel是一套简洁.优雅的PHP Web开发框架,本文将详细介绍Laravel如何进行配置 配置说明 框架下载好了,但是想要很好的使用,可能我们还有一些东西需要知道,这就是配置.和项目有关的配置是在app/config文件夹里,但是除了这里还有一些配置可能是我们需要的.作为一个基础教程,我就不一一介绍了,只是选择一些大家配置比较多的地方讲解一下. app/config中的配置说明 在app/config文件夹中经常配置的一般有两个文件:app.php和database.php两个文件,他

Java环境变量怎么配置?Java环境变量设置教程

  Java环境变量怎么设置?Java语言拥有跨平台的特性,它编译的程序能够运行在多种操作系统平台上,可以实现"一次编写,到处运行"的强大功能.但是Java需要自己手动配置环境变量,这对于Java新手来说是个不小的难题.接下来,小编就教大家Java环境变量设置方法. Java环境变量设置所需工具: JDK 1.7 安装包 Java环境变量设置步骤: 想要成功配置Java的环境变量,那肯定就要安装JDK,才可以开始配置. 1.安装JDK 向导进行相关参数设置.如图: 4.选择安装的路径,