h1. Spring module
The spring support module help you to integrate Spring managed beans with a play application.
h2. Enable the Spring module for the application
In the /conf/application.conf file, enable the Spring module by adding this line:
bc. # The spring module module.spring=${play.path}/modules/spring
h2. Define an application-context.xml registry
In the conf/ directory of the application you can then create a application-context.xml file and define some beans.
For example:
bc. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springsource.org/dtd/spring-beans-2.0.dtd">
You can also define a separate application context which will be used for running the tests by prefixing the filename with the Play! id, ie. test.application-context.xml. This works also works for dev and prod.
h2. Retrieve beans from application code
You can obtain bean instances from the application code, using the play.modules.spring.Spring helper.
bc. public Application extends Controller {
public static void index() {
Test test = Spring.getBeanOfType(Test.class);
...
}
}
h2. @javax.inject.Inject support
Not implemented yet.
h2. Automatic Component Scanning
Spring 2.5 and later supports auto-wiring and component identification using annotations, obviating the need to define beans explicitly in XML.
To enable component scanning, add this line to the /conf/application.conf file:
bc. play.spring.component-scan=true
Note that enabling this scans for @org.springframework.stereotype.Component, @org.springframework.stereotype.Repository, @org.springframework.stereotype.Service to identify Spring beans. Additionally, running the component scan enables support for annotation based configuration (i.e., @org.springframework.beans.factory.annotation.Autowired, etc).
h3. Limited Scanning
You can limit the classes scanned to specific packages or canonical class names with this line in the /conf/application.conf file:
bc. play.spring.component-scan.base-packages=controllers.beans,services
In this example, only classes whose canonical name start with either 'controllers.beans' or 'services' will be scanned and identified as beans.
h2. Manual PropertyPlaceholderConfigurer configuration
By default, a org.springframework.beans.factory.config.PropertyPlaceholderConfigurer containing the properties of application.conf is added to the Spring context. In some cases, this may not be desirable as it can conflict with a PropertyPlaceholderConfigurer that you have defined in your application-context.xml. To disable the automatic PropertyPlaceholderConfigurer placement into the context, update application.conf with
bc. play.spring.add-play-properties=false
and then add your own definition to application-context.xml.
If you want to have your own properties and those of your Play! application handled by a PropertyPlaceholderConfigurer, you can add all of them in application-context.xml:
bc.
h2. Namespaces
If you want the Spring configuration loader to be namespace aware, you need to explicitly state this in the configuration using
bc. play.spring.namespace-aware=true
h2. Spring profiles
If you want to configure Spring profile(s), add the following to the conf/application.conf
bc. play.spring.profiles=DEV