I have obtained the latest Grails 2.0 milestone, and I am seeing a deprecation warning for the ConfigurationHolder
class:
org.codehaus.groovy.grails.commons.ConfigurationHolder
The deprecation message simply says "Use dependency injection instead" which is not very helpful to me. I understand dependency injection, but how can I wire up a bean with the proper Grails configuration so I can access it at runtime? I need to access the configuration from places other than my Controllers and Tags (such as BootStrap
).
Go to start.grails.org and use the Grails Application Forge to generate your Grails project. You can choose your project type (Application or Plugin), pick a version of Grails, and choose a Profile - then click "Generate Project" to download a ZIP file. No Grails installation necessary!
If you need it in an artifact that supports dependency injection, simply inject grailsApplication
class MyController { def grailsApplication def myAction = { def bar = grailsApplication.config.my.property } }
If you need it in a bean in, say, src/groovy
or src/java
, wire it up using conf/spring/resources.groovy
// src/groovy/com/example/MyBean.groovy class MyBean { def grailsApplication def foo() { def bar = grailsApplication.config.my.property } } // resources.groovy beans = { myBean(com.example.MyBean) { grailsApplication = ref('grailsApplication') // or use 'autowire' } }
Anywhere else, it's probably easiest to either pass the configuration object to the class that needs it, or pass the specific properties that are needed.
// src/groovy/com/example/NotABean.groovy class NotABean { def foo(def bar) { ... } } // called from a DI-supporting artifact class MyController { def grailsApplication def myAction = { def f = new NotABean() f.foo(grailsApplication.config.my.property) } }
Update:
Burt Beckwith recently wrote a couple of blog posts on this. One discusses using getDomainClass()
from within domain classes, while the other offers the option of creating your own holder class (if none of the solutions above are appropriate).
An alternative to grailsApplication is the Holders class,
import grails.util.Holders def config = Holders.config
You get config directly off of Holders, no injection needed, which is nice for utility classes, etc.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With