Nuestra aplicación tiene un requisito para admitir el multi-tenancy. Cada uno de los clientes abordados podría anular uno o más beans o algunas propiedades de un bean definidas en el nivel de la plataforma central (códigos/definiciones comunes). Me pregunto cuál es la mejor manera de manejar esto.Anulando el bean definido en el contexto principal en un contexto secundario
Respuesta
Spring le permite redefinir el mismo nombre de bean varias veces, y toma la última definición de bean procesada para un nombre determinado como la que gana. Entonces, por ejemplo, podría tener un archivo XML que defina sus beans centrales e importarlos en un archivo XML específico del cliente, que también redefine algunos de esos beans. Sin embargo, es un poco frágil, ya que no hay un mecanismo para decir específicamente "esta definición de frijol es una anulación".
He encontrado que la forma más limpia de manejar esto es usando el new @Bean
-syntax introduced in Spring 3. En lugar de definir beans como XML, los define en Java. Por lo tanto, sus beans centrales se definirían en una sola clase anotada @Bean
, y las configuraciones de su cliente crearían una subclase que anularía los beans apropiados. Esto le permite usar anotaciones java estándar @Override
, indicando explícitamente que una definición dada de bean está siendo anulada.
- 1. Reemplace el bean de primavera en un contexto con la versión simulada de otro contexto
- 2. cómo anular el bean único definido en el contexto de la aplicación
- 3. Cómo declarar un contexto de aplicación principal
- 4. Contexto en un PreferenceFragment
- 5. Invocando métodos en el contexto de QThread
- 6. Cómo iniciar un intento si el contexto no es Contexto de actividad sino contexto de aplicación
- 7. obtener el contexto en onCreate en SQLiteOpenHelper
- 8. acceso Contexto de primavera en el paquete OSGi
- 9. Jerarquía de contexto de primavera con contexto de aplicación web
- 10. Obtener contexto en un servicio
- 11. HttpUtility no existe en el contexto actual
- 12. XPathExpression no evaluado en el contexto adecuado?
- 13. Reemplazar todo el documento HTML en contexto
- 14. ruby: cómo cargar el archivo .rb en el contexto local
- 15. Qué es el contexto en Android
- 16. 'Sesión' no existe en el contexto actual
- 17. inyección de Spring Bean en un método principal clase
- 18. <context: propiedad-marcador de posición> propiedades no accesibles en el contexto secundario (web)
- 19. ¿Cómo obtener el contexto actual?
- 20. JSF inicializa el bean scope-scope cuando se inicializa el contexto
- 21. Obtener lienzo desde el contexto
- 22. cómo llamar a una tarea ant cuando anulando el objetivo en un archivo secundario
- 23. Acceda al contexto de datos principal en el cuadro de lista en Silverlight
- 24. definir una cadena en contexto resorte
- 25. Generando un Contexto de Caras manualmente
- 26. ¿Qué es un contexto?
- 27. añadir dinámicamente palabras para un contexto en el REBOL
- 28. Obtener el contexto de Android en un adaptador
- 29. ¿Qué significa ECONNRESET en el contexto de un socket AF_LOCAL?
- 30. Intentando explicar el contexto en Android a un amigo
¿está seguro de que puede volver a definir un bean con el mismo ID/nombre en una ctx secundaria? –
mirando esta página http://stackoverflow.com/tags/spring/topusers Creo que él sabe de lo que está hablando –
gracias. No estoy cuestionando la corrección de su publicación. Quería cierta seguridad en esa afirmación particular, ya que mi recurso dev me dijo que esto no es posible en las nuevas versiones de la primavera, es decir, 2.5.xy posteriores. Trató de redefinir el bean (que se definió en el contexto principal) en un contexto secundario con el mismo nombre y recibió un error durante el inicio. –