几天前Grails 3.0正式发布 。 Grails现在基于Spring Boot ,构建系统从Gant更改为Gradle,并且框架的重要部分已经重写。 在本文中,我们将介绍Grails 3引入的所有主要更改。
更新的文件结构
我们将从一个屏幕快照开始,该屏幕快照显示了使用Grails命令行创建的一个新Grails 3项目。
grails create-app hello
前两个文件夹( build和gradle )与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.gradle和gradle.properties包含构建配置。 以前的Grails版本中的BuildConfig.groovy不再存在。
Spring 4.1和Spring Boot
Spring Boot是Grails的新基础。 根据Graeme Rocher Grails 3的说法, 无非就是在Spring Boot之上重新进行重写 。
像Spring Boot应用程序一样,Grails 3项目带有一个具有标准main() method
的Application
类。 这意味着您只需在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自动获得以下特性: TagLibraryInvoker , AsyncController , RestResponder和Controller 。
特性的好处是,您可以轻松地将它们添加到自己的班级中。
例如:假设您要在Grails控制器外部访问request
和params
对象。 您现在要做的就是将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