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.
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.
Para habilitar o plugin, registre ele no vraptor.xml:
<vraptor> <plugin>org.vraptor.plugin.spring.SpringPlugin</plugin> </vraptor>
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; } }
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>
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: