1.普通service的开发
新建一个service
![](http://dl.iteye.com/upload/attachment/0065/2395/551adf9a-7d43-342d-8918-8174d1b4fce5.png)
弹出的输入框中可以输入包名+类名,注意IDE会自动给类名后边加上Service,例如:输入com.xx.Abc,生成的service命名就是com.xx.AbcService。也可以输入Domain的类命名(可用Alt + /提示),生成的类名为domain的类名加service
生成两个文件,一个是测试类,一个是服务类。
![](http://dl.iteye.com/upload/attachment/0065/2404/943aa60b-86a1-39bb-806e-87354a2f0768.png)
在生成的测试类里写些测试代码
@TestFor(TestService)
class TestServiceTests {
void testSomething() {
assert 1==service.serviceMethod(null)
}
}
这里需要注意的是,由于TestFor的annotation的缘故,内置的service变量被自动注入了TestService的实例。不需要手工实例化TestService了。(为啥生成的服务方法叫serviceMethod,生成的测试方法不叫testServiceMethod捏?)
实现一下serviceMethod
class TestService {
def serviceMethod(String input) {
log.info('I\'m service')
return 1
}
}
这里的log是commons-log的log,已经被自动注入,不需要显示声明。
修改一下Config.groovy里的log4j配置
log4j = {
// Example of changing the log pattern for the default console
// appender:
//
appenders {
console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
}
info 'grails.app.services'
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate'
root{
warn 'stdout'
}
}
root的配置是不想后台输出太多日志,这里主要配置文中标红的那句。注意的是grails.app.services是默认的,这样配才能控制service的日志输出,而不是写的包名。
运行一下测试
![](http://dl.iteye.com/upload/attachment/0065/2436/e603c98f-d5ef-3807-a69a-28ba03b59675.png)
test-app是运行整个程序的测试,可以使用test-app 类全名,来指定运行单个测试类。这里不详细说了。
运行后会打很多日志,其中一行就是
test.TestService I'm service
2.service之间的依赖和spring的ioc
grails默认加入了spring的Ioc,使我们可以轻松的使用。
依照1的方法再建一个service。测试代码忽略。
实现代码如下:
class AnotherService {
def serviceMethod() {
log.info("I'm from another Service")
}
}
很简单
在原service上加上引用
class TestService {
def anotherService
def serviceMethod(String input) {
anotherService.serviceMethod()
log.info('I\'m service')
return 1
}
}
在service的test里使用spring ioc需要做点工作,测试代码如下:
@TestFor(TestService)
class TestServiceTests {
void testSomething() {
defineBeans {
anotherService(AnotherService)
}
assert 1==service.serviceMethod(null)
}
}
defineBeans也是内置的,不需要引用。
跑一下test-app,结果:
test.AnotherService I'm from another Service
test.TestService I'm service
3.引用JAVA service
原有的遗留程序,或者某些groovy无法做的工作可以将由java完成。既然groovy和java是亲戚,那就应该能无缝调用。
在src/java里建一个java类,代码如下:
public class JavaTestService {
Logger log = Logger.getLogger(JavaTestService.class);
public void javaTestMethod(){
log.info("I'm from java");
}
}
这里Log用的是log4j
修改一下测试代码:
@TestFor(TestService)
class TestServiceTests {
void testSomething() {
defineBeans {
anotherService(AnotherService)
javaTestService(test.JavaTestService)
}
assert 1==service.serviceMethod(null)
}
}
修改一下TestService
class TestService {
def anotherService
def javaTestService
def serviceMethod(String input) {
anotherService.serviceMethod()
javaTestService.javaTestMethod()
log.info('I\'m service')
return 1
}
}
这里两个引用都使用了def定义,不指定类型,当然也可以使用类型声明,不过这样会在调试web的时候产生一点问题,而且写def的话可以不依赖于相关类。另外,当然也可以让java的类实现一个接口来实现注入。spring ioc这里是按名称注入的,不支持类型注入。
log4j的配置中也需要改一下:
info 'grails.app.services','test'
因为java的service并非grails的service,grails.app.services无法控制他,所以把java类的包名加上。
跑一下测试,结果:
test.AnotherService I'm from another Service
test.JavaTestService I'm from java
test.TestService I'm service
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0065/2395/551adf9a-7d43-342d-8918-8174d1b4fce5-thumb.png)
- 大小: 42.3 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0065/2404/943aa60b-86a1-39bb-806e-87354a2f0768-thumb.png)
- 大小: 14.6 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0065/2436/e603c98f-d5ef-3807-a69a-28ba03b59675-thumb.png)
- 大小: 7.8 KB
分享到:
相关推荐
Grails是一种基于Java平台的开源Web应用框架,它利用Groovy语言的强大特性和简洁语法,为开发者提供了一种高效、灵活的开发环境。本篇文章将深入探讨Grails开发的基础知识,帮助初学者快速掌握Grails的精髓。 1. **...
在Grails项目中,Groovy源代码通常包含控制器(Controllers)、服务(Services)、领域类(Domain Classes)、过滤器(Filters)等核心组件。控制器负责处理HTTP请求,服务提供业务逻辑,领域类定义数据模型,过滤器...
《Grails开发的通讯录详解》 在信息技术领域,开发高效、便捷的通讯录系统是一项常见的任务。本文将深入探讨采用Grails on Groovy技术构建的通讯录系统,旨在为开发者提供一个全面的理解和实践指南。 Grails是一个...
总结,Grails 2.4.4 作为一个成熟的Web开发框架,以其高效的开发模式、强大的Groovy语言支持、丰富的插件库和易于集成的特点,为开发者提供了构建高质量Web应用的优秀选择。通过深入理解其核心组件和最佳实践,...
《Grails开发手册》是对Grails这一基于Groovy语言的Web应用框架的详细介绍。Grails遵循“约定优于配置”的原则,简化了开发流程,整合了Spring MVC和Hibernate等流行技术,使得开发者无需手动编写数据访问层即可实现...
Grails 是一个基于 Groovy 语言的开源 web 应用程序框架,它构建在 Java 平台上,旨在提高开发效率,简化常见 Web 开发任务。Grails 遵循 Model-View-Controller (MVC) 架构模式,允许开发者快速构建动态、数据驱动...
Eclipse 插件 Grails(Groovy)是一个强大的开发工具,它使得在Eclipse环境中进行Groovy和Grails应用的开发变得更为便捷。Groovy是一种动态、面向对象的编程语言,而Grails则是一个基于Groovy的开源Web应用框架,...
Grails是一个基于Groovy语言的全栈式、开源的Web应用框架,它以简化开发流程和提高生产力为目标,特别适合快速构建Web应用。 在本书中,你将学习到以下关键知识点: 1. **Grails概述**:了解Grails的背景、设计...
Grails框架基于Groovy语言,是一种高度动态、敏捷的Java应用开发框架,它简化了Web应用程序的构建过程,同时保持了Java平台的强大功能和稳定性。 ### Grails框架简介 Grails框架是建立在Groovy编程语言之上的一个...
本文将深入探讨Grails的核心源码,特别是版本2.2.2,帮助对Grails感兴趣的朋友们理解其内部工作机制,提升开发技能。 一、项目结构 在解压后的`grails-core-master`目录中,我们可以看到Grails的核心模块组织结构...
Grails是一种基于Java平台的开源Web应用框架,它被设计成对Java开发人员来说如同圣杯一般的存在,因为它旨在减少繁琐的配置工作,让开发者能够更加专注于业务逻辑的实现。Grails借鉴了Groovy语言的特性,Groovy是一...
在IT行业中,Grails是一个基于Groovy语言的开源Web应用框架,它利用了Java平台的优势,提供了一种高效、简洁的开发方式。本压缩包文件“grails app”包含了一步步搭建Grails应用的源代码,虽然缺失了图片说明,但...
1. `grails-app`: 存放Grails应用的核心组件,如controllers、domains、services、views等。 2. `conf`: 配置文件夹,包含应用的配置信息,如`application.yml`。 3. `src/main/groovy`: 存放自定义的Groovy类。 4. ...
4. **Services**:Grails 服务层用于实现业务逻辑,可以被多个控制器共享。它们是单例的,支持事务管理,可方便地与数据库交互。 5. **Plugins**:Grails 插件系统是其强大之处,允许开发者复用和扩展功能。1.3.0....
5. **grails-app/services**:服务层文件夹,存放业务逻辑代码,可被多个控制器复用。 6. **grails-app/views**:视图文件夹,包含GSP(Groovy Server Pages)文件,用于呈现HTML输出。 7. **grails-app/conf**:...
Grails 是一个基于 Groovy 语言的开源全栈式Web应用框架,它旨在提高开发效率,提供简洁、灵活的代码结构,以及强大的自动化工具。Grails 2.4.4 是该框架的一个稳定版本,具有以下特性: 1. **Groovy 语言支持**:...
这本书结合了理论与实践,不仅介绍了Grails的基本概念,还涵盖了高级主题,帮助读者从初学者到熟练掌握Grails开发。 Grails是一个基于Groovy语言的开源Web应用框架,它构建在Java平台上,利用了Spring、Hibernate等...
Grails是一种基于Java平台的开源Web应用框架,它采用了Groovy语言,使得开发过程更加简洁高效。Grails的核心设计理念是“Convention over Configuration”(约定优于配置),这大大减少了开发者在项目设置上的工作量...