2015-01-14 43 views
2

我有一個類,我移動到grails-app/services目錄下,以注入springSecurityService。這個類是spring userDetailsS​​ervice類的實現(這是適當的術語?)。這是我在resources.groovy聲明:依賴注入不能在Grails服務中工作

userDetailsService(com.company.product.PracticeUserDetailsService) { 
    grailsApplication = ref('grailsApplication') 
} 

此類擴展在空對象

我試圖dependencyInjection結果。

class PracticeUserDetailsService extends GormUserDetailsService{ 

    def springSecurityService 

    UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException { 
     // impl omitted 
    } 
} 

如果我創建一些測試控制器或Grails的一些服務和注入springSecurityService,它工作正常。所以,這個特定的課程可能並沒有放在Grails生態系統中。我檢查了this嘗試如下手動注入它:

beans = { 
    springSecurityTEST(grails.plugins.springsecurity.SpringSecurityService) {} 

} 

回答

5

移動PracticeUserDetailsServicegrails-app/servicessrc/groovyresources.groovy改變你的Spring bean定義:

userDetailsService(com.company.product.PracticeUserDetailsService) { 
    grailsApplication = ref('grailsApplication') 
    springSecurityService = ref('springSecurityService') 
} 
+0

非常感謝。我現在明白了;您將springSecurityService聲明爲userDetailsS​​ervice bean的引用bean。但是,你能解釋爲什麼它不能將這個類放在grails-app/services下嗎? – jcd

+1

@jcd Spring bean自動爲服務創建,所以通過將類放在'grails-app/services'中,並在'resources.groovy'中爲它定義一個bean,你就定義了兩次相同的Spring bean,導致麻煩 –