java - plata - ¿Cómo se hace una configuración de resorte de múltiples módulos?
configuracion electronica ejemplos (1)
Tengo un multi-módulo (maven) de construcción de primavera. Todos los módulos publican algunos beans, y la mayoría también consume beans definidos más abajo en el gráfico de dependencia. Aunque la mayoría de ellos son beans declarados de anotación, casi todos los módulos también tienen uno o dos beans declarados xml.
Aunque tenemos una solución medio decente, pero realmente me pregunto cuál es la forma correcta / óptima de organizar los archivos XML en este escenario. ¿Usas importación entre los módulos o hay alguna otra forma? ¿Coloca todos los archivos XML en un lugar o los distribuye de acuerdo con el gráfico de dependencia? ¿Cómo maneja su solución los contextos de resortes parciales (pruebas de integración típicas)?
También me gustaría tener esto organizado de una manera que me permita aprovechar de manera óptima el soporte de primavera de mi IDE (IDEA y algunos usuarios de eclipse).
Utilizamos las importaciones con comodines en los módulos para permitir que otros módulos contribuyan con beans al módulo que declara la importación:
<import resource="classpath*:com/acme/**/*-core-support.xml" />
Modularidad
Los módulos que desean contribuir al "host" solo tienen que colocar los archivos con el nombre correcto en src/main/resources/com/acme
en este caso para que sean recogidos automáticamente. Si utiliza la exploración de classpath (por <context:component-scan />
será aún más fácil).
Otra cosa que ayuda en ese sentido es una pequeña extensión de Spring que recoge beans de un tipo dado y los vuelve a publicar en ApplicationContext
nuevo. Al hacer algo como esto:
<plugin:list id="beanList" class="com.acme.MyCoolPluginInterface" />
<bean class="com.acme.MyPluginHost">
<property name="plugins" ref="beanList" />
</bean>
En combinación con la importación de comodines esto:
- Recoja todos los beans que se encuentran en
ApplicationContext
que implementanMyCoolPluginInterface
y envuélvalos en una lista registrada comobeanList
enApplicationContext
. - Permitir que
MyPluginHost
referencia a esa lista.
De hecho, ahora puede simplemente extender su aplicación agregando módulos de complemento a la ruta de clases (también conocida como dependencia en Maven).
Esa pequeña extensión de Spring se llama Spring Plugin y se publica bajo la licencia de Apache 2. Ver