The spring support module help you to integrate Spring managed beans with a play application.
In the /conf/application.conf file, enable the Spring module by adding this line:
# The spring module
module.spring=${play.path}/modules/spring
In the conf/ directory of the application you can then create a application-context.xml file and define some beans.
For example:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springsource.org/dtd/spring-beans-2.0.dtd">
<beans>
You can obtain bean instances from the application code, using the play.modules.spring.Spring helper.
public Application extends Controller {
}
Not implemented yet.
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:
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).
You can limit the classes scanned to specific packages or canonical class names with this line in the /conf/application.conf file:
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.
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
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:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:application.conf</value>
</list>
</property>
</bean>
If you want the Spring configuration loader to be namespace aware, you need to explicitly state this in the configuration using
play.spring.namespace-aware=true