Olá pessoal…
algumas pessoas me perguntaram como fazer para não usar setters nos parâmetros dos métodos, ou seja, objetos imutáveis…
para isso temos um projeto (ainda em beta) chamado IOGI que consegue instanciar os objetos a partir de parâmetros do construtor…
por exemplo, se vc tem uma classe imutável:
public class Carro {
private final String cor;
private final String modelo;
public Carro(String cor, String modelo) {
this.cor = cor;
this.modelo = modelo;
}
//getters
}
e a recebe como parâmetro de uma lógica:
public void lava(Carro carro) {...}
vc consegue popular esse carro usando os parametros carro.cor e carro.modelo…
para isso funcionar, vc precisa colocar o jar do iogi no seu WEB-INF/lib (está em lib/optional do zip do vraptor)
criar a classe:
public class CustomProvider extends SpringProvider { // ou HibernateCustomProvider, ou JPACustomProvider
@Override
protected void registerCustomComponents(ComponentRegistry registry) {
super.registerCustomComponents(registry);
registry.register(ParametersProvider.class, IogiParametersProvider.class);
registry.register(Instantiator.class, VRaptorInstantiator.class);
}
}
e colocar no seu web.xml (talvez substituindo o existente):
<context-param>
<param-name>br.com.caelum.vraptor.provider</param-name>
<param-value>br.com.seu.pacote.CustomProvider</param-value>
</context-param>
assim, além de ganhar a imutabilidade dos objetos, vc ainda consegue receber qqer componente
no construtor dos seus modelos (por exemplo receber seu dao/repository)…
Em todo caso, esse projeto (iogi) ainda é beta, e ainda tem alguns bugs, que a gente ficaria bastante
felizes se vcs encontrassem
Abraços