在 spring (3.2) 中重用其他包含 spring-annotated 类的 jar 的首选方法是什么?
问题示例:我有一个具有@Autowired SessionFactory 的 jar,但它需要与应用程序的其余部分不同的会话工厂(它与不同的数据库通信)
所以,如果我只是把那个 jar 放在我的类路径中,应用程序将不会启动,因为有 2 个具有相同类型/名称的 bean。我需要将该 jar 与应用程序的其余部分隔离。如何做到这一点?
在 spring (3.2) 中重用其他包含 spring-annotated 类的 jar 的首选方法是什么?
问题示例:我有一个具有@Autowired SessionFactory 的 jar,但它需要与应用程序的其余部分不同的会话工厂(它与不同的数据库通信)
所以,如果我只是把那个 jar 放在我的类路径中,应用程序将不会启动,因为有 2 个具有相同类型/名称的 bean。我需要将该 jar 与应用程序的其余部分隔离。如何做到这一点?
当存在多个候选者时选择特定 bean 由 解决@Qualifier
。只需在应用程序上下文中声明相同的 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>