¿Cuál es la mejor práctica para colocar la anotación @Transactional
? ¿Debo anotar el método de interfaz o la implementación?Donde poner @Transactional? En la especificación o implementación de la interfaz?
Respuesta
Buena pregunta. Siempre lo puse en la implementación. Tal vez porque es un detalle de implementación, en lugar de una abstracción.
Puede desear que diferentes implementaciones tengan diferentes comportamientos transaccionales.
El Guapo señaló que, además de eso, hay más problemas que pueden surgir al poner en la interfaz, relacionados con la estrategia de proxy.
Realmente todo depende de la arquitectura de su aplicación, en mi opinión. Depende de cómo estés transmitiendo tus clases. Si usted tiene su aplicación se establece en proxy-target-class='true'
(en su contexto de aplicación, entonces su información @Transactional
ser recogido costumbre arriba si usted anotar la interfaz.
Salida The Spring Docs -- "Tips" para más información.
primavera recomienda que sólo anotar clases concretas (y métodos de clases concretas) con la anotación @Transactional, en lugar de anotar las interfaces. Sin duda, puede colocar la anotación @Transactional en una interfaz (o un método de interfaz), pero esto funciona solo como cabría esperar. si está utilizando proxies basados en interfaz. El hecho de que las anotaciones Java no se hereden de las interfaces significa que si está utilizando class-ba sed proxies (proxy-target-class = "true") o el aspecto basado en el tejido (mode = "aspectj"), entonces la configuración de transacción no es reconocida por la infraestructura de proxying y weaving, y el objeto no será envuelto en una proxy transaccional, que sería decididamente malo.
+1 para la propina. Estoy editando tu respuesta para agregar un presupuesto – Bozho
Si bien la gestión de transacciones es un detalle de implementación, en muchos casos también es un detalle de la interfaz. Por ejemplo, al definir la interfaz de los servicios de su aplicación, puede considerar poner @Transactional
en la definición de la interfaz para aclarar específicamente qué estrategia de propagación está utilizando.
No uso interfaces en mi sistema porque hasta ahora realmente no veo si será posible implementar algo sobre él. Así que puse anotaciones sobre la implementación y creo que Spring me haría las cosas bien.
No creo que todas las clases tengan interfaces. Veo muchas arquitecturas con muchos patrones y todas adoran las interfaces. Pero una pregunta: si coloca la anotación Spring en la interfaz y usted, por alguna razón, desea otro enfoque para la transacción de una clase de implementación realizada a través de esta interfaz, no podría hacer eso. ¿O estoy equivocado?
Saludos.
- 1. ¿Dónde debería poner la anotación @Transactional: en una definición de interfaz o en una clase implementadora?
- 2. Comenta la interfaz, la implementación o ambas?
- 3. Implementación de la interfaz IList
- 4. ¿La implementación de WebSphere 7 HTTPSession contraviene la especificación J2EE?
- 5. C# implementación anónima de la interfaz (o clase abstracta)
- 6. Implementación de la interfaz Java en MATLAB
- 7. Ingrese a la implementación de la interfaz en Eclipse IDE
- 8. donde poner break en la instrucción switch/case con bloques
- 9. Implementación implícita y explícita de la interfaz
- 10. "Restricciones para la implementación de interfaz explícita ..."
- 11. La implementación de la misma interfaz en diferentes instancias genéricas
- 12. Problema con la implementación de la interfaz en clases parciales
- 13. Donde poner el binario en CMake?
- 14. Implementación de una interfaz según la cual los genéricos se basan en la interfaz
- 15. Interfaz que implica la implementación del indexador
- 16. Debería poner mi definición de interfaz en el mismo espacio de nombres que su implementación
- 17. Ayuda de implementación del patrón de especificación
- 18. JSR: Especificación para evaluación vs Especificación para construir una implementación
- 19. donde debo poner en removeObserver AppDelegate.m, ios
- 20. donde debe "incluir" poner en C++
- 21. MVVM SimpleIoc, cómo utilizar una interfaz cuando la implementación de la interfaz requiere parámetros de construcción
- 22. La implementación de una interfaz Java en Scala
- 23. Implementación de la interfaz OData JSON en Django (Python)
- 24. donde se diseña la implementación de "authenticate_user!" ¿método?
- 25. valor de enumeración implementación de la interfaz modificable de Hadoop
- 26. Diferencia entre la implementación de una interfaz y la aplicación de un atributo en C#
- 27. ¿Interfaz Cast para su objeto de implementación concreto o viceversa?
- 28. Implementación de la navegación "Drilldown" en la interfaz de usuario de la aplicación Android
- 29. Interfaz de implementación frente a interfaz de implementación explícitamente en C#
- 30. Donde puedo encontrar la implementación para std :: string
hace otro muy buen punto. ¡Buen comentario! –
¿Alguien sabe lo que dice la especificación JTA con respecto a la anotación? ¿Deben los proveedores verificar la firma del método del supertipo para la anotación? Y más al punto, si uno reemplaza un método anotado con una versión no anotada, ¿cómo es percibido por un procesador/reflexión de anotación? –