Friday, 15 June 2012

java - Spring bean config using static method from another bean with grails DSL -



java - Spring bean config using static method from another bean with grails DSL -

on grails 2.3.7, service exposes several decorator methods:

class cachemanager { static readonlycache getreadonlycache(name) static readwritecache getreadwritecache(name) }

i want configure services these decorator methods, this:

beans = { cachemanager(cachemanager){ ... } pdfprocessor(pdfprocessor){ documentcache = ref('cachemanager').getreadonlycache('docscache') } isbnvalidator(isbnvalidator){ cache = ref('cachemanager').getreadwritecache('simplecache') }

is there way accomplish this?

update

thanks ian's suggestion, got generic solution working:

@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')}" }

configure cachedecorator methodinvokingfactorybean, returns singleton cachemanager, safely invoke methods.

if want ensure cachemanager set before invoking getter methods purely @ configuration level like

cachemanager(cachemanager) { ... } pdfdocumentcache(methodinvokingfactorybean) { bean -> bean.dependson = ['cachemanager'] targetclass = cachemanager targetmethod = 'getrocache' arguments = ['somecache'] } pdfprocessor(pdfprocessor) { documentcache = pdfdocumentcache }

the dependson should ensure static getrocache method not called until cachemanager bean has been initialized.

java spring grails groovy spring-dsl

No comments:

Post a Comment