我正在开发Grails应用程序(使用Grails 1.3.7)。在服务层,我没有使用命令'create-service'来创建我的服务,而是手动完成。
结果,我的服务没有在控制器和其他服务中自动初始化,也没有处理事务。
但是我不知道通过手动命令创建服务的区别在哪里?因为我没有看到任何配置文件弄清楚这个? (我的意思是在传统的Spring中,我们总是有一些配置文件指定应用程序中的所有bean,但在Grails中却没有)。
我想修复此问题并提交SVN服务器我的修复,但我不想删除旧服务并提交由Grails命令创建的新服务。那么请你帮助我:
1.通过手册解释创建服务与命令的区别是什么?
2.如何将手工创建的服务更改为命令创建的服务而不更换旧服务?
非常感谢你!
答案 0 :(得分:3)
只要将您的类放在grails-app/services
目录中,它就应该像任何其他服务一样(并作为一个Spring bean)。
如果您将其放在src/java
或src/groovy
中,则不会将其视为服务(并且不会被Grails加载为服务工件)。它仍然可以是一个spring bean,但您必须手动将其添加到resources.groovy文件中。
答案 1 :(得分:3)
解释通过手动命令创建服务的区别是什么?
假设您将服务放在grails-app/services
中并使用后缀Service
遵循命名约定唯一的区别是您获得了一个看起来像
class SomeService {
boolean transactional = true
def someMethod() {
}
}
并自动创建名为SomeServiceTests
的单元测试。这就对了。如果您不包含BTW交易,则默认为true
。
如何将手动创建的服务更改为命令创建的服务而不替换旧服务?
假设您遵循惯例,则无所事事。如果您确实遵循惯例并且仍然遇到问题,请使用更多详细信息更新您的问题,例如您尝试使用服务的方式以及服务示例。
答案 2 :(得分:0)
另请注意,Grails自动装配bean必须准确无误,因此如果您拥有MyService并且想要在控制器中使用它,请确保您具有“def myService”或“MyService myService”。如果你更喜欢你的成员变量的不同名称,你也可以直接使用Spring Autowired注释,虽然我只尝试自动装配grails类型(例如grails服务)自动连接到我在resources.xml中声明的bean
如果您将服务或任何其他bean放在resources.xml或resources.groovy文件中,它们也将是自动装配的介绍控制器,其他服务等。
最好将Grails视为“快速Spring”,因此自动装配,事务等都由Spring配置等支持。