Bienvenidos.
El siguiente paso es crear una clase Configuración de Spring MVC Web MS configuré para poder registrar
este interceptor, lo tenemos que registrar en el stack.
Entonces nos vamos a ir al Spring Woodford, al proyecto y en el paquete base, junto a la aplicación
principal, vamos a crear una nueva clase de configuración personalizada.
Cualquier nombre, pero ms conflic está perfecto.
MS confi finalizarÃ.
Bien, entonces, qué tiene que implementar la interfaz web?
MS configure.
Web MS configuré bien, pero antes continuar.
Muy importante anotar con configuré schön bien, acá muchas veces se equivocan y colocan configurable
y no tiene que ser configuré hecho esta anotación configure icho de Context anotado justamente para
registrar Vinz y también para configurar en este caso el contexto MS para registrar un interceptor.
Vamos a implementar un método en Source como siempre o be right.
Por acá buscamos el método add interceptores agregar interceptores lo marcamos ok.
Esto lo quitamos.
Y utilizamos el objeto registry que recibió por argumento.
AT Interceptor.
Lleca necesitamos pasar la instancia, pero bueno, de donde obtenemos de acá esta nota con Componen,
por lo tanto lo tenemos que inyectar entonces por acá privat el tipo bueno, podríamos incluso inyectar
por el tipo concreto.
Ahora, en caso de tener más de una implementación, también podemos implementar mediante la interfaz,
por ejemplo Android Interceptor y acá Interceptor.
Pero bueno, démosle un nombre, un nombre representativo.
Tiempo transcurrido interceptor.
Entonces por acá.
Tiempo transcurrido.
Interceptor perfecto.
Puede copiar y lo pegamos acá.
La instancia bien, importamos la interfaz y la idea es inyectar mediante esta interfaz.
Pero claro, vamos a tener un problema.
Puede que tengamos más de algún interceptor que implementa esta interfaz.
Entonces, cuál inyectar?
Por qué podrían haber más?
Por qué podría existir más de un candidato?
Entonces, como ya vimos en la clase componente, le podemos dar un nombre, por ejemplo.
Tiempo transcurrido.
Voy a copiar el nombre de la clase, lo pego y lo modifico en minúscula, comenzando en minúscula.
Tiempo transcurrido interceptor.
Lo podemos dejar con ese nombre o simplemente tiempo transcurrido.
Aunque da lo mismo.
Mejor interceptor con ese nombre.
Entonces la idea es inyectar algún componente que tenga este nombre pero que implemente esa interfaz.
Entonces, cómo?
Bueno, volvemos acá.
ÂTu Wired?
Calificador cuali faya importamos y acá indicamos el nombre.
Este nombre es importante.
Acá me quedo con mayúscula.
Tiene que ser con minúscula.
Tiempo transcurrido, interceptor, guardamos, copiamos el nombre, volvemos acá y lo pegamos.
Recuerden el mismo nombre en el cual Hilfiger que en el componente.
Entonces dictamos travésdel calificador, pero la interfaz también guardamos bien.
Si lo dejamos así, tal como está, el interceptor se va a aplicar a todas las rutas, a todos los controladores
de forma global, a todas las rutas que tengamos, a los métodos handler, en fin, a todo.
Pero después vamos a ver que podemos configurar que un interceptor se intercepte en algunas rutas o
en patrones.
Por ejemplo, después del add interceptor coloco un punto a path pattern o agregar un patrón de ruta
y acá bueno, separado por coma o una lista.
En realidad puede irse para Volkova una lista de rutas.
Por ejemplo, quiero que solamente se ejecute en form y lo que venga.
En fin.
En Amín, qué sé yo.
Usuarios o lo que sea, cualquier ruta que tengamos en la aplicación.
Bueno, por el momento solamente tenemos form.
Entonces podríamos agregar esa ruta form, pero eso después vamos a ver.
Por ahora lo dejamos de esta forma para que se aplique todo bien.
Guardamos y ya tenemos registrado.
Tenemos configurado el tiempo transcurrido.
Ta listo y le dimos un nombre con el cual la pasamos a la lista.
Por lo tanto, ya podría mostrar este valor en la plantilla en la vista, así que nos vamos a las vistas.
Por ejemplo, formulario y también resultado.
Repartamos acá primero.
Entonces, por acá arriba en el body vamos a tener un tip, un contenedor y dentro un texto un span.
Como estamos usando Buttercup le podemos dar estilo, por ejemplo alert, una clase alert de alerta,
pero su.
Es decir, que se muestra de color verde.
Bien.
Y acá mostramos entonces con th texto el valor con el cual la pasamos a la vista.
Tiempo transcurrido.
Entonces lo voy a copiar.
Volvemos acá de este texto.
Si no, peso las llaves y esto tiempo trascurrido.
Pero bien le podríamos dar también un texto.
Podríamos concatenar un string comilla simple más.
Y en la comida simple colocamos.
Tiempo transcurrido.
2.
Punto espacio.
Más comilla, simple espacio en milisegundos.
Perfecto.
Entonces, aplicar tanto al formulario como también resultaba acá.
Entonces lo ponen a copiar y pegar.
Bueno, puesto lo vamos a solucionar, porque cuando empezamos a copiar y pegar de una adicta, otra
no es buena práctica, porque si copiamos en muchas partes y después tenemos que cambiar algo, bueno,
vamos a tener que replicar este cambio en muchos lugares de nuestra aplicación.
Entonces es mucho mejor reutilizar, es decir, crear alguna plantilla, algún fragmento de código que
sea reutilizable y después lo podemos incluir en las demás vistas como un componente o como una directiva
mucho mejor.
Pero por ahora lo dejamos así.
La idea es probar.
Ahí tenemos.
Entonces, recuerden, lo mostramos en la vista con el mismo nombre con el cual lo registramos acá.
El tiempo transcurrido.
Vamos a probar.
Vamos a levantar.
Bien, al formulario perfecto se fija el tiempo transcurrido 369 en milisegundos actualizamos.
Es un rrando.
Se fijan 3 62, actualizarnos 14.
79 Claro, porque simulamos una sobrecarga en el Tried con una pausa que va de 0 a 4 99.
Entonces se está aplicando a la ruta effort.
Pero qué pasa?
Resultado, por ejemplo, género.
Bueno, completamos acá 12 el Yussef Naim.
De alguna fecha?
Enviar también se fijan 38 ml segunda.
Así que se aplica a todas las rutas.
Tanto formulario como Enver en cualquier parte.
Recuerden que si actualizamos vuelve al formulario 3 61.
Entonces está funcionando perfecto nuestro interceptor, tal como queríamos.
Pero hay varias cosas que analizar, ver y mejorar, pero apartamos por algunas.
Si se fijan en la consola está todo bien.
No hay ningún error, muestra.
Incluso los datos en el log se fijan.
Podemos revisar el log.
Tiempo transcurrido bueno, 3 79 milisegundos, pero un poco más arriba también.
Por ejemplo acá.
Tiempo transcurrido.
Pareja Andel entrando perfecto.
Luego se invoca el método tiempo transcurrido y después tiempo transcurrido post.
Andal saliendo envuelve completamente la invocación del método que sería todo acá.
Este sería el tiempo en que entra y sale el tiempo de ejecución del método.
Bueno y después cuando actualizamos se repite entrando, saliendo.
Bueno.
Y los cálculos se fijan.
Entrando y saliendo.
Acá hicimos una validación en el controlador.
Qué pasa si es nulo?
Es importante validar porque por ejemplo, si lo comentamos.
Es importante.
Voy a guardar, comentamos esta validación, esperemos que se actualice perfecto y voy a actualizar
acá.
Funciona perfecto.
No hay ningún error.
Pero vamos a la consola, al terminal lanza un excepción.
Un error, claro, porque también los recursos de la aplicación.
Las hojas de estilos, los JavaScript, todo lo que estamos incluyendo también son pu.ta y también se
están interceptando.
Pero como son recurso no es un método del controlador.
Por lo tanto, no tiene el model Ambigú.
Es un contexto distinto.
Por eso en nube y un objeto nulo.
Punto.
Un método lanza en NULL Pointer Exception.
Entonces, en el post Andel.
En la línea 43, justamente acá, lanza el error y es justamente como aplicada por los recursos estáticos,
por las hojas, estilos, por todo lo que tenemos acá en estática.
En este caso, bueno, hoja de estilos.
Pero bien, cómo podemos ver o saber qué recursos se están invocando?
Si es un controlador, si es un método Andel.
Si es una hoja de estilo.
Bueno, usando el Logger por acá es bien simple.
Por ejemplo, por acá abajo vamos a imprimir el handler.
Simplemente lo imprimimos.
Por ejemplo, interceptando 2 punto handler guardamos.
Esperemos que se actualice.
Volvemos a refrescar.
De Cádiz se interceptando acá.
Lanza al error.
Se fijan y acá está presente el content type, txt, css, nuestra hoja de estilo y un poco más arriba
cuando imprimimos por acá tiene que estar acá, esta interceptando.
Bueno, primero el controlador interceptando el controlador Font Controller.
El método Form está perfecto, pero un poco más abajo también intercepta los recursos recursos http
rickles, Andrés.
Entonces acá hay un Metais Resources.
Se fijan?
Static public Bueno, y los recursos estáticos, entonces acá cuando falla.
Entonces, por eso importante esta validación.
Entonces, cuando valíamos, esperemos que se actualice.
Perfecto.
Incluso voy a limpiar la consola con Clear.
Actualizamos.
Y ya no hay error.
Entonces es por eso importante, pero también podríamos validar que el handler acá se pasa como genérico
Hoggett.
Pero podríamos preguntar si es instancia de un handler método.
Es decir, de un método handler del controlador.
Y si es así, bueno, también podemos agregar esto acá.
Entonces podemos dar una validación un poco más estricta.
Entonces, si preguntamos, por ejemplo, si el objeto handler es instancia de instance of handler método
y además que el modelo Amboise distinto nulo.
Bien, voy a importar lo importamos de Spring framework web método.
Perfecto, entonces, y Handler es una instancia de deján del método y además es distinto Nul.
Incluso bastaría solamente con esto, solamente con esto.
También va a funcionar.
Incluso lo podemos probar.
Guardamos.
Esperemos que se actualice.
Perfecto.
Actualizamos acá.
Volvemos tampoco darlos.
Se fijan una validación a nivel de tipo de dato, aunque nunca está de más.
También ser más estricto y dejarlo así.
Yo creo que incluso queda mejor.
Bien, voy a copiar Stiff tal cual acá y lo voy a pegar acá en el.
Preguntele al principio.
Bien, pero voy a quitar el modelo envío de que acá no se aplica, solamente quiero preguntar si es
instancia de un método controlador y si es así Logger especialmente para tema de pag.
O mostrar datos en la consola de análisis.
En fin.
Entonces Logger punto.
Info.
Es un método controlador.
Incluso podremos imprimir el nombre.
Cómo lo podemos imprimir?
Bueno, haciendo un často, porque es todo acá.
Object handler.
Es del tipo genérico.
Entonces la idea es convertir esto a un handler.
Método.
Entonces, andele, el método método del controlador y acá hacemos el cast.
Entonces del tipo Hoggett.
Acá hacemos un cast handle el método.
Que tenemos el método.
Punto de que tenemos varios métodos de este objeto, por ejemplo, el tipo del bin.
El método cartoné.
El método.
Las anotaciones.
El método, los parámetros del método.
En fin, mucha información que podríamos querer utilizar, sobretodo como metadata.
El tipo de retorno.
En fin.
Por ejemplo, guet, método, punto.
Acá también anotaciones, tipos, todo, toda la información del método que se está invocando, los
parámetros, la cantidad, parámetros.
En fin.
Entonces por acá solamente quiero imprimir el nombre.
Nada más.
Get por acá tenemos name.
Apartó el más más kidney nombre método y guardamos.
Esperemos que se actualice.
Autorizamos por acá tiene que estar.
Es un método del controlador Ford.
Se fijan en nombre método formulario.
Entonces podemos obtener todo el detalle del método que se está interceptando el controlador, incluso
para temas estadísticos o de bitÃcora o de registro en el log.
Podemos utilizar esta información.
Bien, creo que estamos bien con el tiempo, así que continuamos en la siguiente clase.