我有一个Spring应用程序,它同时连接到两个数据库。因此,对于每个连接,我都有这两个LocalSessionFactoryBean实例,如下所示:
@Bean
public LocalSessionFactoryBean firstSessionFactory() {
final LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean();
lsfb.setPackagesToScan("ro.mycompany.myproject.classes");
lsfb.setDataSource(dataSourceOne);
lsfb.setEntityInterceptor(auditInterceptor1);
lsfb.setHibernateProperties(getHibernateProperties1());
return lsfb;
}
@Bean
public LocalSessionFactoryBean secondSessionFactory() {
final LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean();
lsfb.setPackagesToScan("ro.mycompany.myproject.classes2");
lsfb.setDataSource(dataSourceTwo);
lsfb.setEntityInterceptor(auditInterceptor2);
lsfb.setHibernateProperties(getHibernateProperties2());
return lsfb;
}
对于DAO层,我有一个像这样注入SessionFactory对象的类。
public class GenericDAOImpl extends HibernateDAOSupport implements GenericDAO {
@Autowired
private SessionFactory sessionFactory;
//Other methods goes here
}
我像这样在我的配置文件中实例化bean:
@Bean
public GenericDAO firstGenericDAO() {
final GenericDAOImpl genericDAO = new GenericDAOImpl();
return genericDAO;
}
@Bean
public GenericDAO secondGenericDAO() {
final GenericDAOImpl genericDAO = new GenericDAOImpl();
return genericDAO;
}
如何在不创建setters方法的情况下使firstGenericDAO使用firstSessionFactory以及secondGenericDAO使用secondSessionFactory?我想同时使用两个连接,所以Spring配置文件也不会帮我。
谢谢
最佳答案
除了@Qualifier("...")
之外,还可以使用@Autowired
,或者只使用@Resource(name = "...")
。就我个人而言,我更喜欢使用@Resource,因为它用一个替换了两个注释。
在您的情况下,分别为@Resource(name = "firstSessionFactory")
和@Resource(name = "secondSessionFactory")
。