pepite / Play--framework-Spring-module

A module to interface Spring and the Play! framework
40 stars 24 forks source link

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.

classpath:jdbc.properties classpath:application.conf

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