Utilizzando lo Spring-Context MANIFEST definitions, sto cercando di eseguire un component-scan
per cercare pacchetti per i bean con annotazione Spring. La mia configurazione XML Spring è simile a questa:Componente scansione a primavera in OSGi non trova nulla
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<!-- Scans the classpath of this application for @Components to deploy as
beans -->
<context:component-scan
base-package="com.some.other.module.one,com.another.module.two" />
<context:annotation-config />
....
</beans>
Nel MANIFEST, importare i pacchetti contenenti le classi con le annotazioni Spring. Tuttavia, quando ispeziono ApplicationContext, non contiene nessuno dei bean annotati.
Credo che stia accadendo perché i percorsi di classe che stiamo analizzando sono in bundle diversi. Questi bundle non importano direttamente i pacchetti con le classi che contengono annotazioni Spring. Qual è la confusione del motivo per cui Spring non preleva il classpath del bundle principale da cui è partito il componente-scan? Sembra che stia utilizzando il classpath di ogni pacchetto quando esegue una scansione del classpath. Esiste un modo per ottenere che la scansione del percorso di classe utilizzi il classpath del pacchetto in cui inizia la scansione? .
Modifica
Come detto Danail Nachev seguito, quando Spring esegue la scansione classpath, avviene solo all'interno del modulo che il percorso di classe sta succedendo nel aggirare è quello di utilizzare:
- Inserisci le tue configurazioni per modulo in un bean Spring 3
@Configuration
. - Utilizzare un file XML nel bundle di livello superiore che inizializza il bean
@Configuration
. - Nel bean di livello superiore
@Configuration
utilizzare@Import
per importare gli altri file di configurazione. - Assicurati di
Require-Bundle
nel MANIFEST per verificare che la configurazione che stai importando sia disponibile.
Grazie, questo è esattamente il comportamento che è stato osservato. Sono riuscito a trovare una soluzione alternativa senza utilizzare una scansione del classpath. –