gpt4 book ai didi

java - Spring bean 配置使用来自另一个带有 grails DSL 的 bean 的静态方法

转载 作者:行者123 更新时间:2023-11-30 03:51:28 25 4
gpt4 key购买 nike

在 Grails 2.3.7 上,服务公开了多个装饰器方法:

class CacheManager {
static ReadOnlyCache getReadOnlyCache(name)
static ReadWriteCache getReadWriteCache(name)
}

我想使用这些装饰器方法配置服务,如下所示:

beans = {
cacheManager(CacheManager){ ... }

pdfProcessor(PDFProcessor){
documentCache = ref('cacheManager').getReadOnlyCache('docscache')
}
isbnValidator(ISBNValidator){
cache = ref('cacheManager').getReadWriteCache('simplecache')
}

有办法实现吗?

更新

感谢 Ian 的 suggestion ,我让这个通用解决方案起作用了:

@Singleton
class CacheManager {
static ReadOnlyCache getReadOnlyCache(name)
static ReadWriteCache getReadWriteCache(name)
}

beans = {
cacheManager(CacheManager){ bean ->
bean.factoryMethod = 'getInstance'

cacheDecorator(MethodInvokingFactoryBean) { bean ->
bean.dependsOn = ['cacheManager']
targetClass = CacheManager
targetMethod = 'getInstance'
}

pdfProcessor(PDFProcessor){
documentCache = "#{cacheDecorator.getReadOnlyCache('docscache')}"
}
isbnValidator(ISBNValidator){
cache = "#{cacheDecorator.getReadWriteCache('simplecache')}"
}

cacheDecorator 配置为 MethodInvokingFactoryBean,它返回单例 cacheManager,以安全地调用其方法。

最佳答案

如果您只是想确保在调用 getter 方法之前正确设置 cacheManager,那么您可以纯粹在配置级别使用类似的方法来完成此操作

cacheManager(CacheManager) { ... }

pdfDocumentCache(MethodInvokingFactoryBean) { bean ->
bean.dependsOn = ['cacheManager']
targetClass = CacheManager
targetMethod = 'getROCache'
arguments = ['somecache']
}

pdfProcessor(PDFProcessor) {
documentCache = pdfDocumentCache
}

dependsOn 应确保在初始化 cacheManager bean 之前不会调用静态 getROCache 方法。

关于java - Spring bean 配置使用来自另一个带有 grails DSL 的 bean 的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24346145/

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