日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)java → jfinal集成spring JFinal如何配置springPlug

      jfinal集成spring JFinal如何配置springPlug

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2015/5/27 11:08:00字體大。A-A+

      作者:西西點擊:620次評論:0次標(biāo)簽: jfinal

      jfinal demo1.9 官方最新版
      • 類型:編程控件大小:24.2M語言:中文 評分:10.0
      • 標(biāo)簽:
      立即下載

      jfinal 是 orm+mvc 而且有易與擴展的render plugin等機制。
      JFinal框架也整合了Spring框架,下面實現(xiàn)JFinal怎么去配置Spring框架。在JFinal中整合Spring使用到的類是SpringPlugin和IocInterceptor類。

      Eclipse IDE for Java EE Developers 中

      1、創(chuàng)建 Dynamic Web Project

      2、修改 Default Output Folder,推薦輸入 WebRoot\WEB-INF\classes

      特別注意:此處的  Default out folder 必須要與  WebRoot\WEB-INF\classes  目錄
      完全一致才可以使用  JFinal  集成的  Jetty  來啟動項目。

      3、修改 Content directory,推薦輸入 WebRoot

      注 意 : 此 處 也 可 以 使 用 默 認(rèn) 值 WebContent ,   但 上 一 步 中 的
      WebRoot\WEB-INF\classes 則需要改成 WebContent\WEB-INF\classes 才能對應(yīng)上。 

      4、去官網(wǎng)下載最新的jar包(我這是JFinal-lib-1.9)http://www.ksks6.com/soft/130406.html

      把jetty-server-8.1.8.jar 和JFinal-bin-1.4.jar放到項目 WEB-INF\lib下,jetty-server-8.1.8.jar是開發(fā)時使用的運行環(huán)境,用tomact和生產(chǎn)環(huán)境下就不需要了

      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 目錄下創(chuàng)建 demo 包,并在 demo 包下創(chuàng)建 DemoConfig 文件,   內(nèi)容如下:


      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 標(biāo)簽內(nèi)的配置相一致(在本例中該配置為 demo.DemoConfig)。

      在 demo 包下創(chuàng)建 HelloController 類文件,  內(nèi)容如下:


      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輸出內(nèi)容為 Hello JFinal World 證明項目框架搭建完成。

      注意:在 tomcat 下開發(fā)或運行項目時,需要先刪除  jetty-server-xxx.jar 這個包,否則會引起沖突。

      (抄襲官網(wǎng)api,罪過罪過....)

      jfinal真的挺簡單,迅速,強大的一個框架,沒有ssh的N多xml配置文件,后面做個簡單的學(xué)生信息管理,配合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());  }


      若創(chuàng)建 SpringPlugin 對 象 時 未 指 定 構(gòu) 造 方 法 中 的 形 參 , SpringPlugin 將 自動去WebRoot/WEB-INF 目錄下尋找 applicationContext.xml 作為配置文件進(jìn)行初始化。您還可以通過另外兩個構(gòu)造方法指定配置文件或 ApplicationContext 對象。

      以前學(xué)習(xí)Spring養(yǎng)成了習(xí)慣將Spring的配置放在src下,這里我還是放在src的spring包中,如下:


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


      IocInterceptor類:


      IocInterceptor 攔截 action 并對其進(jìn)行依賴注入,以下是示例代碼:


      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 按屬性名稱進(jìn)行注入。注解@Inject.BY_NAME 按屬性名進(jìn)行注入,@Inject.BY_TYPE 按類型進(jìn)行注入。不指定注入類型時將不會進(jìn)行注入。

      登錄服務(wù)接口與實現(xiàn)類:


      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有很大的興趣,我發(fā)現(xiàn)最主要的一點是jfianl極簡風(fēng)格和牛x的開發(fā)效率讓大家為之興奮,尤其是jfinal的dao設(shè)計。至于沒有在新項目中進(jìn)行嘗試,因為好多項目需要對事務(wù)尤其是多庫事務(wù)上進(jìn)行處理,而這點也讓大家犯難了起來。公司目前的項目是基于springmvc+mybatis,所以我將jfinal dao 集成到spring上,利用spring 強大的事務(wù)抽象能力解決事務(wù)難題。

            不說了,先上代碼。。

      ?

      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();//默認(rèn)mysql方言
              }
              //config與dataSource相關(guān)綁定
              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對應(yīng)的表信息
                 &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與數(shù)據(jù)庫綁定,模型與config進(jìn)行綁定,這個類的作用我相信大家如果對jfinal比較熟悉,應(yīng)該不難理解。

          jfianl Model、DbPro 的獲取和釋放連接采用了spring的DataSourceUtils進(jìn)行替換

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

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

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

          這樣就可以利用spring的事務(wù)和jfinal dao的方便性了。

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)