依赖注入在Grails服务中不起作用

jcd*_*jcd 3 grails dependency-injection spring-security

我有一个我在grails-app/services目录下移动的类,以便注入springSecurityService.这个类是spring userDetailsS​​ervice类的实现(这是正确的术语吗?).这是我在resources.groovy中的声明:

userDetailsService(com.company.product.PracticeUserDetailsService) {
    grailsApplication = ref('grailsApplication')
}
Run Code Online (Sandbox Code Playgroud)

这个课程正在扩展 GormUserDetailsService.

我尝试的dependencyInjection导致一个null对象.

class PracticeUserDetailsService extends GormUserDetailsService{

    def springSecurityService

    UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException {
        // impl omitted
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在grails中创建一些测试控制器或某些服务并注入springSecurityService,它可以正常工作.所以,这个特定的类可能还有一些东西没有放在Grails生态系统中.我检查了这个尝试手动注入它如下:

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

}
Run Code Online (Sandbox Code Playgroud)

Dón*_*nal 6

移动PracticeUserDetailsServicegrails-app/servicessrc/groovy,改变你的Spring bean定义resources.groovy到:

userDetailsService(com.company.product.PracticeUserDetailsService) {
    grailsApplication = ref('grailsApplication')
    springSecurityService = ref('springSecurityService')
}
Run Code Online (Sandbox Code Playgroud)

  • @jcd Spring bean 是为服务自动创建的,因此通过将类放在 `grails-app/services` 中并在 `resources.groovy` 中为其定义一个 bean,您将两次定义同一个 Spring bean,这只能导致使困难 (2认同)