Nem tudo são flores com o framework MVC VRaptor. Uma classe anotada com Component só pode ter um construtor público. Senão o seguinte erro é exibido na inicialização do container web:
org.vraptor.config.ConfigException: cannot load classes
...
Caused by: org.vraptor.component.InvalidComponentException:
com.globo.ekzameno.vraptor.QuestionarioLogic component has 2 accessible constructors.
This is not desirable as it may reflect optional arguments and create complex attributes.
Ok, ok, isso não é o fim do mundo para o VRaptor, mas me atrapalhou um pouco com os testes unitários, pois eu pretendia fazer injeção de dependência por construtor. Como esse framework não me permite isso, terei que fazer por método set. Ou seja, ao invés de fazer assim:
public TiagoLogic() {
this(new RepositorioImpl());
}
public TiagoLogic(Repositorio repositorio) {
this.repositorio = repositorio;
}
Terei que fazer assim:
public TiagoLogic() {
setRepositorio(new RepositorioImpl());
}
public void setRepositorio(Repositorio repositorio) {
this.repositorio = repositorio;
}
Não é um grande problema, só questão de preferência mesmo. Prefiro por construtor.