java - example - spring aop hello world
¿Está utilizando Spring AOP para iniciar sesión una buena idea? (3)
Estoy leyendo en Spring en este momento y uno de los ejemplos utilizados para el uso de AOP es registrar el inicio y el final de las llamadas al método.
También he leído que usar AOP puede afectar el rendimiento.
¿Está utilizando Spring AOP una buena idea para este tipo de registro? Tengo entendido que Spring utiliza Dynamic AOP, sería mejor usar Static AOP (Like AspectJ) para este tipo de AOP.
Ciertamente, la política de codificación de la empresa para la que trabajo requiere una cantidad ridícula de registro y quiero reducir la cantidad de código de registro que tengo que escribir y mejorar la legibilidad de mi código.
¿Estoy ladrando el árbol equivocado?
Lea esta publicación de blog sobre sus inquietudes sobre el rendimiento.
La manera de pensar en AOP es poner los beneficios funcionales proporcionados en primer lugar. Si el registro automatizado es su requisito y el AOP lo satisface, acéptelo.
Dicho esto, por supuesto, se prefiere tejer el tiempo de carga si se requiere un registro de grano fino.
Lo hice de manera similar a la manera descrita en esta publicación de blog . Es lo mejor que encontré y también tiene una sample que muestra muy bien la diferencia entre usar y no usar AOP.
No vale la pena, a menos que esté haciendo algo más elegante que el inicio de sesión, como la administración de errores con persistencia. Si tiene una buena jerarquía de excepciones (dominio, sistema) y establece correctamente los límites de registro, no reducirá mucho el código de registro.
Utilicé Spring AOP para implementar el registro, así que comparto mis observaciones:
- El impacto en el rendimiento no es suficiente, es menor que el impacto de la propia explotación
- Al tener los aspectos configurados en la configuración de Spring, puede deshabilitar completamente el código de registro si es necesario
- La depuración se vuelve más problemática a medida que las trazas de pila se vuelven más largas
- Tal decisión afecta suficientemente el diseño. No solo se obtiene un conjunto de interfaces y clases de aspecto, sino que las clases de producción deben ser muy "delgadas". No olvide que no puede interceptar llamadas a métodos no públicos. Las llamadas automáticas (incluso a los métodos públicos) tampoco se pueden interceptar (ya que se trabaja con
this
identificador desnudo en lugar de manejarlo envuelto por AOP) y, por lo tanto, no se puede registrar. Entonces, todo el registro solo puede ocurrir en los límites de la interfaz. (Esto se refiere al uso de tejido de aspecto basado en Proxy, hay una opción de subclases en tiempo de ejecución con cglib, pero no lo usé) - Escribir puntos de corte puede ser muy complicado. IntelliJ Idea ayuda a determinar en gran medida qué métodos se deben asesorar mediante pointcut.
- En general, me gustó este enfoque y creo que vale la pena usarlo, pero me pareció mucho más complicado de lo que esperaba