2012-10-23 14 views
7

Qui vogliamo solo escludere una classe da certa classpath, diconoCome escludere una classe da Spring in applicationContext?

com.abc.projectA.service.orderService.sectionA.orderService.class

Tuttavia c'è un'altra classe con lo stesso nome ma in diversi classpath

com.abc.projectA.service.orderService.sectionB.orderService.class

in modo che solo filer da il nome della classe non funzionerà.

ma ho provato il seguente metodo:

<context:component-scan base-package="com.abc"> 
    <!--other filters--> 
    <!--.......--> 
    <context:exclude-filter expression="projectA\.service\.orderService\.sectionA\.orderService" type="regex" /> 
</context:component-scan> 

Non funziona. Quindi scommetto che lo <context:exclude-filter> è valido solo a livello di pacchetto ma non per una classe specifica? In tal caso, come escludere una classe dall'iniezione di bean in modo che possiamo scegliere con la classe di essere cablati con lo stesso nome di classe?

Grazie in anticipo.

risposta

15

No, l'esclusione dovrebbe funzionare, il problema che si sta verificando è probabilmente che si presume che il percorso in regex sarà pre-sospeso con il pacchetto base che non è true..solo basta specificare il pacchetto completo

<context:component-scan base-package="com.abc"> 
    <!--other filters--> 
    <!--.......--> 
    <context:exclude-filter expression="com\.abc\.projectA\.service\.orderService\.sectionA\.orderService" type="regex" /> 
</context:component-scan> 
+1

Grazie. Che cosa succede se in realtà vogliamo escludere un aspetto (non l'espressione, ma aspect.aj e aspact.class) come possiamo raggiungere lo stesso obiettivo? – Dreamer

0

Quando si impostano i bean, è necessario includere l'ubicazione completa del pacchetto delle classi in modo che le classi con nomi duplicati non costituiscano mai un problema. Ad esempio:

<bean id="orderServiceA" class="com.foo.bar.a.OrderService"> 

<bean id="orderServiceB" class="com.foo.barr.b.OrderService"> 

Ora è possibile avere entrambi e non incorrere in alcun problema. Forse mi manca qualcosa, ma non capisco perché è necessario eliminare una classe perché ha lo stesso nome di un'altra classe in un pacchetto diverso. Intendo che l'SDK Java ha più classi chiamate List e non causa mai un problema.

+0

Grazie per il consiglio, ma perché entro la primavera di default identificheranno il fagiolo per nome invece che id e nel caso reale che in realtà vuole escludere un aspetto invece che ad una classe normale non può quindi usare id per identificare il fagiolo. – Dreamer

+1

Quindi fornire ai bean un attributo name. – thatidiotguy

0

Mi sembra che si stia tentando di interrompere la convenzione Nomi pacchetto univoco descritta nello Java Spec: section 7.7.

Oppure stai provando a caricare versioni diverse delle stesse classi? Il tuo classloader potrebbe non essere in grado di disambiguare.

+0

Grazie per il consiglio. Sì, non è una buona pratica ed è una specie di caso specifico. – Dreamer

Problemi correlati