重用springbean-名称冲突

重用springbean-名称冲突,spring,javabeans,collision,uniqueidentifier,Spring,Javabeans,Collision,Uniqueidentifier,在spring(3.2)中,重用其他包含spring注释类的jar的首选方法是什么 问题示例: 我有一个jar,它有@Autowired SessionFactory,但它需要与应用程序的其余部分不同的会话工厂(它与不同的数据库通信) 因此,如果我只是将jar放在我的类路径中,应用程序将不会启动,因为有两个bean具有相同的类型/名称。我需要将这个jar与应用程序的其余部分隔离开来。 如何实现这一点?当存在多个候选者时,选择一个特定的bean由@限定符解决。只需在应用程序上下文中声明相同的bea

在spring(3.2)中,重用其他包含spring注释类的jar的首选方法是什么

问题示例: 我有一个jar,它有@Autowired SessionFactory,但它需要与应用程序的其余部分不同的会话工厂(它与不同的数据库通信)

因此,如果我只是将jar放在我的类路径中,应用程序将不会启动,因为有两个bean具有相同的类型/名称。我需要将这个jar与应用程序的其余部分隔离开来。
如何实现这一点?

当存在多个候选者时,选择一个特定的bean由
@限定符
解决。只需在应用程序上下文中声明相同的bean,并为它们分配不同的id或限定符名称。让我们看看这个类:

public class Foo{

     @Autowired
     private SessionFactory sessionFactory;
}
假设
sessionfactorympl1
sessionfactorympl2
都是bean连接的候选对象,并且您希望将sessionFactory指向
sessionfactorympl1
实例,那么您需要添加
@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> 


这适用于小型应用程序,但当您有数百行代码时就不行了。SessionFactory就是一个例子,将会有更多。难道没有办法告诉spring特定的类集(给定jar中的所有内容)应该有一个单独的上下文吗?你的意思是说我可以在带注释的库代码上强制使用限定符吗?这种模糊性正是我不使用@Autowired之类的注释库代码的原因。你不知道这个豆子需要怎么做used@ChristianBongiorno您愿意分享您处理使用bean的库代码的策略吗?如果不注释库代码,那么如何进行布线?