Fork me on GitHub

Pippo can be used together with the Spring framework, using Spring as a dependency injection container.
When Pippo creates new instances of your various Controller subclasses it delegates the instance creation to a ControllerFactory. The module pippo-spring contains SpringControllerFactory that it’s a ControllerFactory implementation that delegates to the Spring container to instantiate a given Controller class. This allows for the instance to be configured via dependency injection (all Spring annotations are valid, AOP, …).

An example of such a Controller subclass could look as follows:

public class ContactsController extends Controller {

    private ContactService contactService;

    public void index() {
        List<Contact> contacts = contactService.getContacts()
        getResponse().bind("contacts", contacts).render("contacts");


Pippo automatically creates the ContactsController instance and pippo-spring injects the ContactService service bean, so basically you don’t have to worry about any of that stuff.

To activate pippo-spring integration in your Application you must register SpringControllerFactory and extend from ControllerApplication instead:

public class MyApplication extends ControllerApplication {

    protected void onInit() {
        // create spring application context
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        // registering SpringControllerFactory
        setControllerFactory(new SpringControllerFactory(applicationContext));

        // add controller
        GET("/", ContactsController.class, "index");        


where SpringConfiguration can looks like:

public class SpringConfiguration {

    public ContactService contactService() {
        return new InMemoryContactService();


SpringControllerFactory class has two constructors: with and without autoRegistering. By default autoRegistering is true. If autoRegistering flag is set on true then if Spring doesn’t contain a bean for a controller class, SpringControllerFactory will create and register a BeanDefinition. If you want to modify the default bean definition of the Controller you must override createBeanDefinition method.

Also don’t forget to add pippo-spring as dependency in your project:


You can see a demo here