gpt4 book ai didi

spring - Grails 插件 bean 的重写方法

转载 作者:行者123 更新时间:2023-12-02 06:47:18 26 4
gpt4 key购买 nike

Spring Security 插件提供了一个名为“springSecurityService”、类型为 grails.plugins.springsecurity.SpringSecurityService 的 bean。我需要重写此服务的 getCurrentUser 方法。

我首先尝试使用扩展来做到这一点

class CustomSecurityService extends SpringSecurityService {

@Override
Object getCurrentUser() {
// my implementation uses methods from the parent class
}
}

为了用上面的类的实例替换插件定义的 bean,我将以下内容添加到 resources.groovy

springSecurityService(CustomSpringSecurityService)

但这不起作用,因为没有设置 SpringSecurityService (我正在扩展的类)的任何依赖项,因此我得到了 NullPointerExceptions。未设置这些依赖项的原因是因为不再有 SpringSecurityService

类型的 spring bean

因此,我转向委托(delegate):

import grails.plugins.springsecurity.SpringSecurityService as PluginSpringSecurityService

class CustomSpringSecurityService {

@Autowired @Delegate
PluginSpringSecurityService pluginSpringSecurityService

Object getCurrentUser() {
// my implementation uses methods from pluginSpringSecurityService
}
}

然后我在resources.groovy中定义了两个bean

springSecurityService(CustomSpringSecurityService)
pluginSpringSecurityService(grails.plugins.springsecurity.SpringSecurityService)

在第二次尝试中,我再次希望名为“springSecurityService”的 bean 引用 CustomSpringSecurityService,但我还需要一个 grails.plugins.springsecurity.SpringSecurityService 类型的 bean >,因为我的 getCurrentUser 实现使用了该 bean 的一些其他方法。

但是,我再次发现 pluginSpringSecurityService 的依赖项没有被设置。是否有更简单的方法可以在受依赖注入(inject)的上下文中重写由插件提供的 bean 方法?

最佳答案

返回到子类化并重新定义 resources.groovy 中的 bean,但满足依赖关系。它们是按名称自动注入(inject)的,但全部列出,因此请将它们显式添加到您的重新定义中:

springSecurityService(CustomSpringSecurityService) {
authenticationTrustResolver = ref('authenticationTrustResolver')
grailsApplication = ref('grailsApplication')
passwordEncoder = ref('passwordEncoder')
objectDefinitionSource = ref('objectDefinitionSource')
userDetailsService = ref('userDetailsService')
userCache = ref('userCache')
}

关于spring - Grails 插件 bean 的重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com