Pessoal,
Estou tentando implementar logs na minha aplicação utilizando o MethodInterceptor, bom iremos utilizar para mais coisas além de log, mas a principio é apenas isso. No entando não consigo fazer com que os métodos do meu sistema sejam inteceptados. Ele consegue interceptar qualquer método, seja ele java.util.; javax.; etc porém nas minhas classes mesmo não.
Segue como está configurado no meu XML, nele eu determino para ele pegar todas as classes que terminem com Controller, Util e Impl.
<bean name="methodLoggingInterceptor" class="net.alv.captacao.comum.log.LoggerInterceptor"/>
<bean name="proxyCreator" class="net.alv.captacao.comum.log.MyProxy">
<property name="beanNames">
<list merge="true">
<value>*Controller</value>
<value>*Util</value>
<value>*Impl</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>methodLoggingInterceptor</value>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="methodLoggingInterceptor"/>
</list>
</property>
</bean>
A classe LoggerInterceptor eu implementei os métodos
public Object invoke(MethodInvocation method) throws Throwable {
System.out.println("");System.out.println("");
System.out.println("------------------------------> invoke <------------------------------");
String classMethodIdentifier = method.getMethod().getDeclaringClass() + "." + method.getMethod().getName();
System.out.println(classMethodIdentifier + " starts");
Object result = method.proceed();
System.out.println(classMethodIdentifier + " finished");
System.out.println("------------------------------> invoke <------------------------------");
System.out.println("");System.out.println("");
return result;
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws ServletException {
System.out.println("");System.out.println("");
System.out.println("------------------------------> INICIANDO PREHANDLE <------------------------------");
System.out.println("handler.getClass().getSimpleName() = " + handler.getClass().getSimpleName());
System.out.println("\n Class = " + handler.getClass().getName());
System.out.println("\n request.getMethod().toString() = " + request.getMethod().toString());
System.out.println("------------------------------> FINALIZANDO PREHANDLE <------------------------------");
System.out.println("");System.out.println("");
//Log.trace("Executando Procedure 33333333333333333333333333333333333333333333333333");
return true;
Como deve ter percebido eu misturei um pouco os interceptors. Com o metodo preHandle eu consigo verificar a execução das classes Controllers, e apenas elas. E com o método invoker eu consigo interceptar os métodos.
Alguém saberia me explicar o porque ele não interceptar os métodos das minhas classes e me ajudar a fazer isso. Minha aplicação, que é web claro, utiliza spring, claro, por isso tenho varias projetinhos nela.
Podem me ajudar