日期:2014-05-17  浏览次数:20719 次

在spring配置文件中声明了两个相同类型的bean,在java普通类中怎么注入其中的一个?
RT:

<bean autowire="byName" id="jahwaSessionFactory" name="jahwaSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="jahwaDataSource" />
<qualifier value="jahwaSessionFactory"/>
<property name="mappingLocations">
<list>
<value>classpath*:mapping/**/*.hbm.xml</value>
<value>classpath*:com/mdao/emap/**/*.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.cache.use_second_level_cache=false
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider
hibernate.cache.use_structured_entries=true
</value>
</property>
</bean>

<bean  autowire="byName" id="emapSessionFactory" name="emapSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="emapDataSource" />
<qualifier  type="org.springframework.beans.factory.annotation.Qualifier"  value="emapSessionFactory"/>
<property name="mappingLocations">
<list>
<value>classpath*:mapping/**/*.hbm.xml</value>
<value>classpath*:com/mdao/emap/**/*.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.cache.use_second_level_cache=false
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider
hibernate.cache.use_structured_entries=true
</value>
</property>
</bean>


我这是定义了两个数据源工厂,在普通java类中怎么获得name是jahwaSessionFactory的bean呢?

1、@Qualifier("jahwaSessionFactory")使用这个Qualifier,但是不管我把这个注解放到类上还是定义的变量上都不行
2、使用@Resource(name="")带不带name也都不行?
我用了以上两个注解,都会抛出下边的异常,该怎么解决,求大神解答,急急急!!!
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: [jahwaSessionFactory, emapSessionFactory]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:697)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 79 more
------解决方案--------------------
你去掉一个试试。看你报的异常 应该是 只能有一个匹配( single matching bean)的sessionFactory的bean。
你定义了两个org.springframework.orm.hibernate3.LocalSessionFactoryBean
可能是这个原因。
------解决方案--------------------
引用:
@Resource(name = "jahwaSessionFactory")
private LocalSessionFa