gpt4 book ai didi

java - 如何优先使用相同id的spring bean?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:15 25 4
gpt4 key购买 nike

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

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

错误:

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'voterId' is expected to be of type [com.spring.test2.Student] but was actually of type [com.spring.test2.Parent]

我的要求是 Student bean 应该加载 VoterId 而不是 Parent Bean。

下面是java文件和spring bean xml文件:

测试.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>

test1.xml

<beans>

<context:annotation-config/>
<bean id="voterId" class="com.spring.test2.Student">
<property name="name" value="hello"/>
<property name="number" value="2080"/>
</bean>
</beans>

AbstractContextJUnitTest.java

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


}

ContextJUnitTest.java

@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);
}
}

最佳答案

你试过了吗@Primary

<bean id="voterId" class="com.spring.test2.Student" primary="true">
<property name="name" value="hello"/>
<property name="number" value="2080"/>
</bean>

你必须使用 @Qualifiercom.spring.test2.Parent 任何你需要的地方。

或者您可以获得类型为的 bean:

applicationContext.getBeansOfType(Student.class).get("voterI‌​d")

关于java - 如何优先使用相同id的spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42038751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com