2012-04-13 14 views
5

¿Es posible registrar automáticamente un resorte @Component (o una de sus especificaciones, por ejemplo, @Repository) como un servicio OSGi? Entonces, ¿puedo utilizar el autoenvío y todos los demás beneficios de Spring dentro de un paquete y OSGi Service Registry para comunicarme entre paquetes?Exportación de componentes Spring como servicios OSGi

ACTUALIZACIÓN: A partir de this discussion no parece posible con Blueprint estándar, solo en Eclipse Gemini.

Respuesta

5

Supongo que está familiarizado con Eclipse Gemini Blueprint (anteriormente Spring Dynamic Modules, anteriormente Spring OSGi)?

Usted exporta sus granos usando <service>-tag. No estoy seguro de si puede exportar todos los beans anotados @Component etc. automáticamente.

+0

Ah, entonces si no tengo la etiqueta '', Blueprint usará la creado por Spring en lugar de intentar crear su propia copia. ¿Es esto correcto? ¿Funcionará esto con Apache Aries Blueprint de la misma manera? –

+0

Si hace ' '. Me temo que nunca he usado Aries Blueprint . – artbristol

+2

y @artbristol ama a OSGi :) –

0

Solución desagradable, solo para beans singleton: almacene la instancia en un campo estático en el constructor y utilice el getter de este campo como su método de fábrica Blueprint/iPOJO.

1

Una posible implementación para soportar esto sin el truco @AlexeyRomanov sugerido podría ser agregar una implementación de BeanFactoryPostProcessor al paquete de extensión de Gemini Blueprint a través de un fragmento.

Ese procesador que podría crear las definiciones necesarias de exportación OSGi dentro de BeanFactory y debería funcionar correctamente.

Un ejemplo de cómo podría verse eso es el ServiceReferenceInjectionBeanPostProcessor de la extensión de SpringDM/Gemini que le permite obtener OSGi-Services inyectado a través de la anotación @ServiceReference. (Aunque vinculé Spring DM, esta clase todavía debería estar presente en Gemini, pero no pude encontrar un enlace directo a su javadoc)

Cuestiones relacionadas