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 の提案のおかげで、この一般的なソリューションが機能しました。
@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')}"
}
そのメソッドを安全に呼び出すには、 singleton を返すcacheDecorator
asを構成します。MethodInvokingFactoryBean
cacheManager