4.2 The Application Class
Every new Grails application features an Application
class within the grails-app/init
directory.
The Application
class subclasses the GrailsAutoConfiguration class and features a static void main
method, meaning it can be run as a regular application.
4.2.1 Executing the Application Class
There are several ways to execute the Application
class, if you are using an IDE then you can simply right click on the class and run it directly from your IDE which will start your Grails application.
This is also useful for debugging since you can debug directly from the IDE without having to connect a remote debugger when using the run-app —debug-jvm
command from the command line.
You can also package your application into a runnable WAR file, for example:
$ grails package
$ java -jar build/libs/myapp-0.1.war
This is useful if you plan to deploy your application using a container-less approach.
4.2.2 Customizing the Application Class
There are several ways in which you can customize the Application
class.
Customizing Scanning
By default Grails will scan all known source directories for controllers, domain class etc., however if there are packages in other JAR files you wish to scan you can do so by overriding the packageNames()
method of the Application
class:
class Application extends GrailsAutoConfiguration {
@Override
Collection<String> packageNames() {
super.packageNames() + ['my.additional.package']
}
...
}
Registering Additional Beans
The Application
class can also be used as a source for Spring bean definitions, simply define a method annotated with the Bean and the returned object will become a Spring bean. The name of the method is used as the bean name:
class Application extends GrailsAutoConfiguration {
@Bean
MyType myBean() {
return new MyType()
}
...
}
4.2.3 The Application LifeCycle
The Application
class also implements the GrailsApplicationLifeCycle interface which all plugins implement.
This means that the Application
class can be used to perform the same functions as a plugin. You can override the regular plugins hooks such as doWithSpring
, doWithApplicationContext
and so on by overriding the appropriate method:
class Application extends GrailsAutoConfiguration {
@Override
Closure doWithSpring() {
{->
mySpringBean(MyType)
}
}
...
}