Java 如何优先使用相同id的Springbean?
在我们的项目中,我们使用spring和Junit进行Junit测试。我们使用了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
@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("voterId")