Estou aprendendo java, e consegui fazer algumas coisas com aspect no vraptor, mas estou com um problema.
ao tentar colocar um pointcut em um metodo do controller anotado por @Resource, o método é invocado por reflexão (pelo menos eu acho que é isso), e por esse motivo não consigo colocar um point cut em um controller específico.
exemplo:
@Pointcut("execution(public * save(..))")
Esse funciona pois não estou definindo a classe, mas somente o método.
não funciona pois dá um erro, ou não funciona pois não acontece nada?
Lucas_Cavalcanti
de qqer forma, pra métodos de controllers, vc pode criar um Interceptor ao invés de um Aspect (na prática é a mesma coisa, o stack.next() executa o método de verdade)
Eu tentei usar interceptor mas preciso tratar os parametros antes do metodo ser executado.
Então eu sempre chamava o ParametersInstantiatorInterceptor antes para instanciar os metodos, e utiliza-los, mas o vraptor acabava chamando esse interceptor dinovo…
se tiver alguma forma do meu interceptor executar entre ParametersInstantiatorInterceptor e o método seria o ideal…
Lucas_Cavalcanti
pq public …DefaultController index() é um método chamado index que retorna um DefaultController
Lucas_Cavalcanti
crie uma classe igual a essa (possivelmente com outro nome):
vou fazer isso então… ai se algum dia eu precisar interceptar algo antes do ExecuteMethodInterceptor.class eu coloco ai nessa lista né?
…
então resolvido!
Valeu Lucas!
mas eu estava fazendo errado o @Pointcut será? Queria saber fazer dessa outra forma também…
Yokomizo
Lucas, achei o erro… desulpa ai mas foi erro na minha sintaxe!
//Eu estava fazendo assim... errado... DefaultController index@Pointcut("execution(* br.teste.controller.DefaultController index(..))")//Não coloquei o ponto entre o DefaultController e o index//Assim funcionou@Pointcut("execution(* br.teste.controller.DefaultController.index(..))")
Yokomizo
Bom… valeu por me ensinar o funcionamento dessa parte do vraptor dos interceptors… e desculpa ai que eu estou começando com java…
isso, se vc quiser adicionar outro interceptor em uma ordem diferente da padrão, é só colocar nessa lista a classe, tirar a anotação @Intercepts e colocar @Component
Yokomizo
O problema é agora não estou conseguindo usar DI no construtor
mas eu li em algum post aqui no guj que eu teria que fazer DI pelos setters…
Bom…que seja…
Lucas_Cavalcanti
isso, qqer classe onde o Aspecto vai passar precisa ter um construtor padrão, infelizmente…