在spring(3.2)中重用其他包含spring-annotated类的jar的优先方法是什么?
问题示例: 我有一个具有@Autowired SessionFactory的jar,但它需要与应用程序的其余部分不同的会话工厂(它与不同的数据库进行通信)
所以,如果我把那个jar放在我的类路径中,应用程序将无法启动,因为有两个bean具有相同的类型/名称。我需要将jar与应用程序的其余部分隔离开来。 如何实现?
答案 0 :(得分:1)
@Qualifier
解决了多个候选人出现时选择特定bean的问题。只需在应用程序上下文中声明相同的bean,并为它们分配不同的id或限定符名称。让我们来看看这个课程:
public class Foo{
@Autowired
private SessionFactory sessionFactory;
}
假设SessionFactoryImpl1
和SessionFactoryImpl2
都是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>