覆盖Grails插件bean的方法 [英] override method of Grails plugin bean
问题描述
Spring Security插件提供了一个名为'springSecurityService'的bean,其类型为 grails.plugins.springsecurity.SpringSecurityService
。我需要重写此服务的 getCurrentUser
方法。
我首先尝试使用扩展名
class CustomSecurityService扩展了SpringSecurityService {
$ b $ @Override
Object getCurrentUser(){
/ /我的实现使用了父类中的方法
code $ $ $ $ $ $ $ $ $ $ $ $ <由上面的类的实例插件定义的bean将以下内容添加到 resources.groovy
springSecurityService(CustomSpringSecurityService)
但这并不奏效,因为没有我设置了 SpringSecurityService
(我正在扩展的类)的依赖关系,所以我得到NullPointerExceptions。这些依赖关系没有设置的原因是因为不再有一个类型为 SpringSecurityService
的Spring bean。于是,我转到授权:
导入grails.plugins.springsecurity.SpringSecurityService作为PluginSpringSecurityService
类CustomSpringSecurityService {
@Autowired @Delegate
PluginSpringSecurityService pluginSpringSecurityService
Object getCurrentUser(){
//我的实现使用pluginSpringSecurityService中的方法
}
}
然后我在 resources.groovy中定义了两个bean $ c
$ p $ springSecurityService(CustomSpringSecurityService)
pluginSpringSecurityService(grails.plugins.springsecurity.SpringSecurityService)
在第二次尝试中,我再次希望名为'springSecurityService'的bean引用 但是,我再次发现 回到子类化并重新定义 The Spring Security plugin provides a bean named 'springSecurityService' of type I first tried to do it using extension To replace the bean defined by the plugin with an instance of the class above I added the following to But this didn't work because none of the dependencies of So, I then turned to delegation: I then defined two beans in In this second attempt, I again want the bean named 'springSecurityService' to refer to However, I again found that the dependencies of Go back to subclassing and redefining the bean in
这篇关于覆盖Grails插件bean的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋! CustomSpringSecurityService
,但我还需要一个类型为 grails.plugins.springsecurity.SpringSecurityService
的bean,因为我的 getCurrentUser <
pluginSpringSecurityService
的依赖关系>没有被设置。是否有更简单的方法来覆盖插件提供的bean在依赖注入的上下文中的方法? resources.groovy
中的bean,但满足依赖关系。它们是按名称自动注入的,但都列出来了,所以明确地将它们添加到重定义中:
springSecurityService(CustomSpringSecurityService){
authenticationTrustResolver = ref('authenticationTrustResolver')
grailsApplication = ref('grailsApplication')
passwordEncoder = ref('passwordEncoder')
objectDefinitionSource = ref('objectDefinitionSource')
userDetailsService = ref('userDetailsService')
userCache = ref('userCache')
}
grails.plugins.springsecurity.SpringSecurityService
. I need to override the getCurrentUser
method of this service.class CustomSecurityService extends SpringSecurityService {
@Override
Object getCurrentUser() {
// my implementation uses methods from the parent class
}
}
resources.groovy
springSecurityService(CustomSpringSecurityService)
SpringSecurityService
(the class I'm extending) are set so I get NullPointerExceptions. The reason these dependencies are not set is because there's no longer a spring bean of type SpringSecurityService
import grails.plugins.springsecurity.SpringSecurityService as PluginSpringSecurityService
class CustomSpringSecurityService {
@Autowired @Delegate
PluginSpringSecurityService pluginSpringSecurityService
Object getCurrentUser() {
// my implementation uses methods from pluginSpringSecurityService
}
}
resources.groovy
springSecurityService(CustomSpringSecurityService)
pluginSpringSecurityService(grails.plugins.springsecurity.SpringSecurityService)
CustomSpringSecurityService
, but I also need a bean of type grails.plugins.springsecurity.SpringSecurityService
, because my implememtation of getCurrentUser
use some other methods of that bean.pluginSpringSecurityService
are not being set. Is there an easier way to override a method of a bean provided by a plugin in a context that is subject to dependency injection?resources.groovy
, but satisfy the dependencies. They're auto-injected by name but all listed, so add them explicitly to your redefinition:springSecurityService(CustomSpringSecurityService) {
authenticationTrustResolver = ref('authenticationTrustResolver')
grailsApplication = ref('grailsApplication')
passwordEncoder = ref('passwordEncoder')
objectDefinitionSource = ref('objectDefinitionSource')
userDetailsService = ref('userDetailsService')
userCache = ref('userCache')
}