2014-03-14 62 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' 
     ] 
    }