4. @Resource V3
public class ProductController {
private final ProductDAO dao;
private final Result result;
public ProductController(ProductDAO dao, Result result) {
this.dao = dao;
this.result = result;
}
public void add(Product product) {
dao.save(product);
result.include("message", "Product saved!");
}
}
5. @Controller V4
public class ProductController {
private final ProductDAO dao;
private final Result result;
CDI
@Inject
public ProductController(ProductDAO dao, Result result) {
this.dao = dao;
this.result = result;
}
public void add(Product product) {
dao.save(product);
result.include("message", "Product saved!");
}
}
6. @Controller CDI
public class ProductController {
@Inject private ProductDAO dao;
@Inject private Result result;
public void add(Product product) {
dao.save(product);
result.include("message", "Product saved!");
}
}
28. V4
public class BeforeInvocation {
CDI
public void do(@Observes BeforeMethodExecutionEvent evt) {
System.out.println("Antes da invocação!!");
}
}
29. V4
public void do(@Observes AfterValidationEvent evt) {
... CDI
}
public void do(@Observes BeforeRedirectToViewEvent evt) {
...
}
public void do(@Observes BeforeAnythingEvent evt) {
...
}
.....
30. V3
@Component
@ApplicationScoped
public class CustomRoutes implements RoutesConfiguration {
public void config(Router router) {
new Rules(router) {
public void routes() {
routeFor("/clist").is(ClienteController.class).list();
}
};
}
}
31. CDI V4
public class AppRoutesExtensions {
public void register(@Observes CustomRoutesBuilder route) {
route.of("/clist").is(ClienteController.class).list();
}
}
32. CDI V4
public class AppRoutesExtensions {
public void register(@Observes CustomRoutesBuilder route) {
route.of("/clist").is(ClienteController.class).list();
}
}
public class PluginExtensions {
public void register(@Observes CustomRoutesBuilder route) {
route.of("/_plugin").is(MyPlugin.class).plug();
}
}
38. CDI
@Named
public class Global {
public String getAsa() {
return "Valor ultra-interessante pra view";
}
}
<p>Valor: ${global.asa}</p>
39. @Named
CDI
@SessionScoped
public class LoggedUser {
private User user;
...
public String getUsername() {
return user.getUsername();
}
}
<p>Usuário Logado: ${loggedUser.username}</p>
40. E mais:
qualifiers CDI
stereotypes
interceptors (cdi)
custom scopes
proxies e Instance
portable extensions
classpath scanning
41. V4
baseado no cdi
compatível com vraptor3
integração com spring
ainda ideias, nada codado
aberto pra ideias!
42. V4
Responda a pesquisa sobre o
futuro do VRaptor e dê sua
opinião!
http://bit.ly/HWTKmO
@sergio_caelum
http://groups.google.com/group/
@paulo_caelum
caelum-vraptor-dev
@caelum