Grails 3的新增功能

几天前Grails 3.0正式发布 。 Grails现在基于Spring Boot ,构建系统从Gant更改为Gradle,并且框架的重要部分已经重写。 在本文中,我们将介绍Grails 3引入的所有主要更改。

更新的文件结构

我们将从一个屏幕快照开始,该屏幕快照显示了使用Grails命令行创建的一个新Grails 3项目。

grails create-app hello

结构2

前两个文件夹( buildgradle )与Grails 3中的新构建系统Gradle有关。顾名思义, build是与构建相关的文件(如编译的类和组合的包)所在的目录。 gradle目录包含Gradle Wrapper ,使您无需本地安装Gradle即可构建项目。

conf文件夹的内容也已更改。 现在,配置文件的默认格式为YAML 。 如果您喜欢用Groovy编写配置,则仍然可以手动创建grails-app / conf / application.groovy配置文件。
现在, Logback是默认的日志记录提供程序。 日志记录配置(以前是Config.groovy的一部分)已移至conf / logback.groovy 。 请注意, conf文件夹不再是源目录。

init是Grails 3中的新文件夹。它包含Bootstrap.groovy (与以前的Grails版本中的内容相同)和新的Application主类(我们将在Spring Boot部分中进行研究)。

src文件夹的结构已更改,以匹配Gradle约定。 现在,其他Java和Groovy文件位于:

src/main/java
src/main/groovy
src/test/java
src/test/groovy

build.gradlegradle.properties包含构建配置。 以前的Grails版本中的BuildConfig.groovy不再存在。

Spring 4.1和Spring Boot

Spring Boot是Grails的新基础。 根据Graeme Rocher Grails 3的说法, 无非就是在Spring Boot之上重新进行重写

像Spring Boot应用程序一样,Grails 3项目带有一个具有标准main() methodApplication类。 这意味着您只需在IDE中运行主类即可启动Grails 3应用程序。

默认的Application类如下所示:

class Application extends GrailsAutoConfiguration {
  static void main(String[] args) {
    GrailsApp.run(Application)
  }
}

注意,打包应用程序时获得的war文件现在可以使用java -jar命令执行:

java -jar build/libs/myApplication-0.1.war

这将运行main方法,该方法使用嵌入式Tomcat服务器启动应用程序。 当然,您仍然可以像选择早先的Grails版本一样将war文件部署在您选择的应用服务器上。

Application类充当Spring配置类 。 因此,我们可以使用Spring的@Bean批注定义自定义bean。 如果要在某些应用程序事件中执行自定义代码,则可以覆盖onStartup()onShutdown()类的方法。

class Application extends GrailsAutoConfiguration {

  ...
 
  @Bean
  MyBean myBeanId() {
    return new MyBeanImpl();
  }
 
  @Override
  void onStartup(Map<String, Object> event) {
    super.onStartup(event)
   // custom startup code..
  }
}

特质

在Grails中,诸如Controllers或Domain类之类的组件始终具有一些神奇的附加功能。 例如,在Controller中,您可以使用诸如render()redirect()getParams()类的getParams()而无需子类化另一个类。 在Grails 3中,这些功能已被重写,以利用Groovy 2.3引入的特性

某些特性会自动附加到Controllers,Services,Tag库等,以使框架方法可用。 例如,一个Controller自动获得以下特性: TagLibraryInvokerAsyncControllerRestResponderController

特性的好处是,您可以轻松地将它们添加到自己的班级中。

例如:假设您要在Grails控制器外部访问requestparams对象。 您现在要做的就是将WebAttributes特性添加到您的类中:

class MyCustomComponent implements WebAttributes {

  public MyCustomComponent() {

    // make use of WebAttributes methods like getWebRequest() or getParams()
    println "base url: " + webRequest.baseUrl
    println "params: " + params
    ...
  }
}

拦截器

Grails 3引入了独立的拦截器。 拦截器可以拦截传入的请求以执行常见任务(例如,日志记录,身份验证等)。

可以使用create-interceptor命令创建一个新的拦截create-interceptor

grails create-interceptor MyInterceptor

新创建的拦截器如下所示:

class MyInterceptor {

  boolean before() { 
    // executed before a request is processed by a controller
    true 
  }

  boolean after() {
    // executed after a request is processed by a controller
    true
  }

  void afterView() { 
    // executed after the view has been rendered
  }

}

拦截器替代了以前的Grails版本使用的过滤器。 过滤器仍可在Grails 3中使用,以实现向后兼容。 但是,现在认为它们已被弃用。

如果您知道Spring Web MVC,则可以轻松地看到与Springs Handler Interceptor的相似之处。

摇篮

如前所述,Grails 3使用Gradle代替Gant作为构建系统。 Gradle用于执行诸如编译,运行测试和打包应用程序之类的任务。

当执行grails clean类的Grails命令时,作业将委派给相应的Gradle任务(例如gradle clean )。 为此使用了Grails 3附带的Gradle-Wrapper。

如果要使用Gradle的本地安装,则可以使用自己的Gradle版本直接执行Gradle任务。 建议使用Gradle 2.2或更高版本。

下表显示了Grails命令及其相应的Gradle任务:

Grails命令 摇篮任务
清洁 清洁
编译
组装
运行应用
测试应用 测试
战争 组装


以前的Grails版本中的BuildConfig.groovy已完全由Gradle配置( build.gradle )取代。 现在在build.gradle中定义了第三方依赖

dependencies {
  compile 'org.grails.plugins:hibernate' 
  compile 'org.grails.plugins:cache' 
  compile 'org.hibernate:hibernate-ehcache'
  runtime 'org.grails.plugins:asset-pipeline' 
  runtime 'org.grails.plugins:scaffolding'
  ...
}

有关更多详细信息,请参阅Gradle文档中的“ 依赖关系管理指南”

个人资料

每当您运行create-app命令时,Grails 3都会使用配置文件来创建新的应用程序。

概要文件封装了项目结构,命令,模板和插件。 默认情况下,Grails 3使用网络配置文件,该配置文件将创建一个应用程序,如上面的屏幕快照所示。

要使用其他Profile创建项目,可以使用--profile parameter

grails create-app myapp --profile=web-plugin

Grails 3具有三种不同的配置文件:

  • 网络标准的Grails Web应用程序
  • 网页插件的Web应用程序的插件
  • Web-micro最小的微服务应用程序

简短的摘要

Grails 3进行了重大更改。 代码基础更改为Spring Boot,Gant替换为Gradle,使用Traits重新实现了现有功能,并添加了Profiles和Interceptor等新功能。

进行所有这些更改后,将现有的Grails 2.x应用程序升级到Grails 3可能会变得非常困难(必须首先更新所有插件)。 如果您打算升级到Grails 3,请查看Grails 3升级指南

翻译自: https://www.javacodegeeks.com/2015/04/whats-new-in-grails-3.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值