服务的强大在于它包含了可重用的逻辑,你可以使用来自其他类的服务,包括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>