重用spring bean - 名称冲突

时间:2013-04-11 23:18:49

标签: spring javabeans collision uniqueidentifier

在spring(3.2)中重用其他包含spring-annotated类的jar的优先方法是什么?

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

所以,如果我把那个jar放在我的类路径中,应用程序将无法启动,因为有两个bean具有相同的类型/名称。我需要将jar与应用程序的其余部分隔离开来。 如何实现?

1 个答案:

答案 0 :(得分:1)

@Qualifier解决了多个候选人出现时选择特定bean的问题。只需在应用程序上下文中声明相同的bean,并为它们分配不同的id或限定符名称。让我们来看看这个课程:

public class Foo{

     @Autowired
     private SessionFactory sessionFactory;
}

假设SessionFactoryImpl1SessionFactoryImpl2都是bean连接的候选者,并且您希望将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>