Spring Plugin

O VRaptor2 oferece um plugin para que você possa utilizar a injeção de Beans do Spring nas suas classes de lógica.

O exemplo a seguir também está disponível para download.

Constructor Injection x Setters

Importante: O suporte é dado somente a injeção através do construtor. Não oferecemos injeção através de setters pois isso quebraria o pattern "Good Citizen". Leia mais aqui, onde na parte 3 é descrito como injeção de dependências através de setters pode deixar seus objetos em um estado inválido, verificando por nulls em todos os cantos.

Assim que você migrar para injeção através de construtor, suas variáveis membro poderão ser declaradas como finais e o seu código de teste ficara mais simples.

vraptor.xml

Para habilitar o plugin, registre ele no vraptor.xml:

<vraptor>

        <plugin>org.vraptor.plugin.spring.SpringPlugin</plugin>

</vraptor>

Spring bean class

Vamos escrever uma classe simples que usaremos como um Spring bean.

Ele cria um usuário e disponibiliza um getter para acessá-lo:

public class SystemUser {

        private final User user;

        public SystemUser() {
                //cria um usuário
                this.user = new User();
                this.user.setName("Nico Steppat");
                this.user.setLogin("nico");
        }

        public User getUser() {
                return user;
        }
}

Spring's applicationContext.xml

Para usar Spring beans precisamos registá-los no arquivo applicationContext.xml, que é o arquivo de configuração do Spring IOC.

Coloque o arquivo no seu classpath:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

        <!-- Sping bean -->
        <bean id="org.vraptor.spring.model.SystemUser" class="org.vraptor.spring.model.SystemUser"/>

</beans>

Injeção do Spring bean

Estamos prontos para usar o Spring bean na nossa classe de lógica.

Vamos injetar o SystemUser com a ajuda do Spring plugin no construtor da classe seguinte:

@Component("user")
public class HomeComponent {

        private final SystemUser user;

        /**
         * Injeção usando Spring!
         *
         * O usuário será injetado automaticamente.
         * @param user
         */
        public HomeComponent(SystemUser user) {
                this.user = user;
        }

        /**
         * URL: user.home.login
         * View: user.home.ok (user/home.ok.jsp)
         *
         * Somente uma lógica vazía para chamar o view.
         */
        public void home() {
        }

        /**
         * Ejetar o user.
         *
         * @return
         */
        public User getUser() {
                return user.getUser();
        }

}

Pronto. Resumindo, você deve fazer três coisas:

  1. Configurar o vraptor.xml para adicionar o plugin do spring ioc.
  2. Configurar o seu bean no spring ioc (applicationContext.xml no classpath).
  3. Criar sua lógica que recebe o bean no construtor.