2013-04-11 2 views
0

Каков предпочтительный подход для повторного использования другой баночки, содержащей весенние аннотированные классы весной (3.2)?Повторное использование весенних фасолей - столкновение имен

Пример проблемы: У меня есть банку, который @Autowired SessionFactory, но она нуждается в другом сеансе завод, чем остальная часть приложения (он разговаривает с другой базой данных)

Так что, если я просто положить что jar в моем пути к классам приложение не запускается, потому что есть 2 боба с тем же типом/именем. Мне нужно, чтобы эта банка была изолирована от остальной части приложения. Как это достичь?

ответ

1

Выбор конкретного компонента, когда присутствуют несколько кандидатов, адресуется @Qualifier. Просто объявите те же компоненты в контексте приложения и назначьте их с разными именами идентификаторов или квалификаторов. Давайте посмотрим на этот класс:

public class Foo{ 

    @Autowired 
    private SessionFactory sessionFactory; 
} 

Если предположить, что обе SessionFactoryImpl1 и SessionFactoryImpl2 являются кандидатами для боба проводки, и вы хотите, чтобы указать SessionFactory к SessionFactoryImpl1 примеру вместо этого, то вам нужно добавить @Qualifier аннотацию так же, как в пример ниже:

public class Foo{ 

    @Autowired 
    @Qualifier("sessionFactory1") 
    private SessionFactory sessionFactory; 
} 

И в контексте приложения

<bean class="example.SessionFactoryImpl1"> 
    <qualifier value="sessionFactory1"/> 
    <!-- inject any dependencies required by this bean --> 
</bean> 

<bean class="example.SessionFactoryImpl2"> 
    <qualifier value="sessionFactory2"/> 
    <!-- inject any dependencies required by this bean --> 
</bean> 
+0

Это может работать для см все приложения, но не тогда, когда у вас есть ряд строк кода. SessionFactory - пример, будет больше. Разве нет способа сказать весне, что определенный набор классов (все в данной банке) должен иметь отдельный контекст? – mabn

+0

Вы хотите сказать, что я могу заставить классификатор для кода аннотированной библиотеки? Эта неоднозначность именно поэтому я не комментирую библиотечный код такими вещами, как @Autowired. Вы не представляете, как может понадобиться использовать этот bean-компонент –

+0

@ChristianBongiorno Вы бы поделились своей стратегией обработки библиотечного кода, который использует бобы? Если вы не комментируете библиотечный код, то как вы выполняете проводку? – Stephane

Смежные вопросы