Grails 3 introduces GrailsAutoConfiguration
as the base class for a Grails application. We can extend this class, add a main
method and we are ready to go. By default this class is the Application
class in the grails-app/init
directory. We can override several Grails lifecycle methods from the GrailsAutoConfiguration
base class. One of them is doWithSpring
. This method must return a closure that can be used by the Grails BeanBuilder
class to add Spring beans to the application context. The closure has the same syntax as what we already know for the grails-app/conf/spring/resources.groovy
file, we know from previous Grails versions.
We start with a simple class we want to use as a Spring bean:
// File: src/main/groovy/com/mrhaki/grails/SampleBean.groovy package com.mrhaki.grails class SampleBean { String message }
Next we create a class that implements the CommandLineRunner
interface. Grails will pick up this class, if we configure it as a Spring bean, at startup and executes the code in the run
method.
// File: src/main/groovy/com/mrhaki/grails/SamplePrinter.groovy package com.mrhaki.grails import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.CommandLineRunner class SamplePrinter implements CommandLineRunner { @Autowired SampleBean sample @Override void run(final String... args) throws Exception { println "Sample printer says: ${sample.message}" } }
Now we are ready to register these classes as Spring beans using the doWithSpring
method in our Application
class:
// File: grails-app/init/com/mrhaki/grails/Application.groovy package com.mrhaki.grails import grails.boot.GrailsApp import grails.boot.config.GrailsAutoConfiguration class Application extends GrailsAutoConfiguration { @Override Closure doWithSpring() { // Define closure with Spring bean // definitions, like resources.groovy. def beans = { // Define Spring bean with name sample // of type SampleBean. sample(SampleBean) { message = 'Grails 3 is so gr8!' } // Register CommandLineRunner implementation // as Spring bean. sampleBootstrap(SamplePrinter) } return beans } static void main(String[] args) { GrailsApp.run(Application, args) } }
Now we can run our Grails application and in our console we see the message:
grails> run-app | Running application... Sample printer says: Grails 3 is so gr8! Grails application running at http://localhost:8080 in environment: development grails>
Written with Grails 3.0.7.