Java 如何优先使用相同id的Springbean?

Java 如何优先使用相同id的Springbean?,java,spring,unit-testing,spring-mvc,junit4,Java,Spring,Unit Testing,Spring Mvc,Junit4,在我们的项目中,我们使用spring和Junit进行Junit测试。我们使用了@ContextConfiguration注释来加载多个文件。我们有两个类AbstractContextJUnitTest和ContextJUnitTest和ContextJUnitTest扩展了AbstractContextJUnitTest 在代码流期间,我注意到在多个不同bean类型的文件中有相同的bean Id。当我测试这些JUnit并得到以下错误时 错误: <beans> <con

在我们的项目中,我们使用spring和Junit进行Junit测试。我们使用了
@ContextConfiguration
注释来加载多个文件。我们有两个类
AbstractContextJUnitTest
ContextJUnitTest
ContextJUnitTest
扩展了
AbstractContextJUnitTest

在代码流期间,我注意到在多个不同bean类型的文件中有相同的bean Id。当我测试这些JUnit并得到以下错误时

错误:

<beans> 
    <context:annotation-config/>
    <bean id="voterId" class="com.spring.test2.Parent">
    <property name="Name" value="hai"/>
    </bean>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
        <property name="username" value="system" />
        <property name="password" value="system" />
    </bean> 
    <bean id="transactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource" />
    </bean> 
</beans>
org.springframework.beans.factory.BeanNotOfRequiredTypeException:Bean 名为“voterId”的类型应为[com.spring.test2.Student] 但实际上是[com.spring.test2.Parent]类型

我的要求是学生bean应该用VoterId而不是父bean加载

以下是java文件和SpringBeanXML文件:

test.xml:

<beans> 
    <context:annotation-config/>
    <bean id="voterId" class="com.spring.test2.Parent">
    <property name="Name" value="hai"/>
    </bean>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
        <property name="username" value="system" />
        <property name="password" value="system" />
    </bean> 
    <bean id="transactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource" />
    </bean> 
</beans>
contextjunitest.java

@ContextConfiguration(locations="classpath:/com/spring/test2/test1.xml")
public class AbstractContextJUnitTest extends AbstractTransactionalJUnit4SpringContextTests{


}
@ContextConfiguration(locations={"classpath:/com/spring/test2/test.xml"})
public class ContextJUnitTest extends AbstractContextJUnitTest{


    @Test
    public void testStudent(){
        Student stud=applicationContext.getBean("voterId",Student.class);
        assertEquals(stud.getNumber(), 2080);
    }
}

这可能是因为您按照这个顺序扩展了类..并且您的test.xml没有任何包含Student的bean。因此,它只是遵循继承并找到父项。 下面几行让它首先在test.xml中查找bean voterid,然后在那里找到了它。 ContextConfiguration(locations={“classpath:/com/spring/test2/test.xml”})公共类contextjunitest

您尝试过吗


我可以重写Junit类中的locations属性吗。我的意思是使用任何方法?为什么要这样做…只需在各自的xml中交换父bean和学生bean…它应该可以正常工作。我发布的是我项目的示例。但在我的项目中,我不应该更改它。@sidharthapani尝试一下-
applicationContext.getBeansOfType(Student.class).get(“voterId”)
<bean id="voterId" class="com.spring.test2.Student" primary="true">
        <property name="name" value="hello"/>
        <property name="number" value="2080"/>
</bean>
applicationContext.getBeansOfType(Student.class).get("voterI‌​d")