2010-01-15 8 views
28

Estoy leyendo en Spring en este momento y uno de los ejemplos utilizados para utilizar AOP es registrar el inicio y el final de las llamadas al método.¿Está utilizando Spring AOP para iniciar sesión una buena idea?

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?

Respuesta

13

Lea this blog-post acerca de sus problemas de 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, se prefiere, por supuesto, tejer el tiempo de carga si se requiere un registro de grano fino.

32

que utilizan primavera AOP para implementar el registro de por lo comparto mis observaciones:

  • Impacto en el rendimiento no es suficiente, es menor que el impacto de la tala en sí
  • Tener aspectos configurados en la configuración de la primavera, que son capaces para deshabilitar completamente el código de registro si es necesario
  • La depuración se vuelve más problemática ya 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 el controlador this desnudo en lugar de la maneta envuelta 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, existe 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 gusta este enfoque y creo que es digno de usar, pero parecía mucho más complicado de lo que esperaba
3

lo hice de manera similar a la forma en que se describe en this blog post. Es lo mejor que encontré y también tiene un sample que muestra muy bien la diferencia entre usar y no usar AOP.

Imho no vale la pena, a menos que esté haciendo algo más elegante que el inicio de sesión, como la gestió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.

+0

El enlace es al sitio del blog y no al blog real del tema en cuestión –

Cuestiones relacionadas