2014-03-14 61 views
1

从我们的Grails/Groovy应用程序中,我们需要使用来自传统Java服务类的服务,其构造函数的类型为org.springframework.core.io.Resource ,例如注入构造函数参数Grails/Groovy的Spring资源文件

public ServiceClass(Resource someResource) 

我们需要注入的服务类的实例到Groovy类中使用Spring DSL我们的应用程序中,与资源指的是我们的/ src目录/主/资源中的一个XML文件。我试图为此创建Spring配置,但到目前为止我找不到可行的解决方案。配置文件的相关部分看起来像各种教程,如发现此

beans = { 
    xmlns aop:"http://www.springframework.org/schema/aop", 
    sec:"http://www.springframework.org/schema/security", 
    context:"http://www.springframework.org/schema/context" 

    serviceClass(com.somepackage.ServiceClass) { 
     //here we need to refer to the constructor arg XML file some way 
    } 
} 

我曾尝试多种语法关闭beanDefinition.constructorArgs,但不幸的是迄今为止没有成功。虽然应用程序编译(grails:war)和启动(grails:run-app)都没有指出bean布线有任何问题,但是当应用程序实际加载到浏览器中时,我们收到一个NPE,声明我们的Groovy类服务类被注入,是一个空对象。所以看起来,豆类布线毕竟不成功。任何帮助表示赞赏

+2

我想你阅读http://grails.org/doc/latest/guide/spring.html#theBeanBuilderDSLExplained“可以使用每个bean定义方法的参数定义构造函数参数。把它们的第一个参数后(类): bb.beans { 叫exampleBean(MyExampleBean “firstArgument”,2){ someProperty = [1,2,3]} } '' – cfrick

+0

,你也仍然可以使用groovy旁边的''resources.xml'',如果你感觉更好,写作XML – cfrick

+0

感谢您的评论。我在提问之前阅读了所提及的文档并尝试了这种语法,但之后它也不起作用。然而,事实证明,主要问题是项目设置本身,在解决问题后,现在已经解决了;这种方法或者在闭包中使用bean.constructorArgs似乎都可以 – hammerfest

回答

3

与项目设置本身以及多个清理/重新编译固定的各种问题后,似乎下列两种方法都OK

serviceClass(com.somepackage.ServiceClass, '/WEB-INF/constructor-arg-xml-file.xml') {} 

serviceClass(com.somepackage.ServiceClass) { bean -> 
     bean.constructorArgs = [ 
      '/WEB-INF/constructor-arg-xml-file.xml' 
     ] 
    }