Grails 1.1 Service 层Using Services from Java

服务的强大在于它包含了可重用的逻辑,你可以使用来自其他类的服务,包括Java类。

这里有一些方法让你重用来自Java的服务。简单的方法是把你的服务移动到grailsapp/services目录下的一个包里。

这是关键步骤,因为你不可能在Java中导入一个默认package 。

作为示例, BookService 就是因为上面的原因,在下面Java中不能使用:class BookService { void buyBook(Book book) { // logic } }不过, 把这个类放入一个package中便可修复,, 把这个类移动到 grailsapp/services/bookstore子目录,然后,修改package 声明:package bookstore class BookService { void buyBook(Book book) { // logic } }package的替代是,定义个需要服务实现的接口:package bookstore; interface BookStore { void buyBook(Book book); }然后,服务:class BookService implements bookstore.BookStore { void buyBook(Book b) { // logic } }后一种方法更熟悉, 在Java端,只需要接口的引用,而不需要实现类。

无论哪种方式,这个练习的目的是,在编译时,让Java能够静态解决类(或接口)的使用。

现在,这样便可在src/java包内创建一个Java类,并提供了一个setter,在Spring中使用bean的类型和它的名字:package bookstore; // note: this is Java class public class BookConsumer { private BookStore store; public void setBookStore(BookStore storeInstance) { this.store = storeInstance; } … }这样一来,你可以在 grails-app/conf/spring/resources.xml中把这个Java当做Springbean来配置 (更多详情查看 Grails and Spring):<bean id="bookConsumer" class="bookstore.BookConsumer"> <property name="bookStore" ref="bookService" /> </bean>