gpt4 book ai didi

spring - 如何覆盖 Spring @Autowire 注释并将字段设置为 null?

转载 作者:行者123 更新时间:2023-12-04 13:51:16 25 4
gpt4 key购买 nike

我是一名 Spring 新手,正在从事一个基于 Spring 的大型项目,该项目在 Spring bean 之间具有广泛的耦合。我正在尝试编写一些集成测试来练习整个应用程序功能的子集。为此,我想覆盖一些 Autowiring 。
例如,假设我有一个类

public class MyDataServiceImpl implements MyDataService {
@Qualifier("notNeededForMyDataServiceTest")
@Autowired
private NotNeededForMyDataServiceTest notNeededForMyDataServiceTest;
//...
}

和一个上下文文件:
<bean id="myDataService"
class="MyDataServiceImpl">
</bean>

在我的测试中,我不需要使用 notNeededForMyDataServiceTest field 。有什么方法可以覆盖 @Autowired注释和设置 notNeededForMyDataServiceTest为空,也许在 XML 文件中?我不想修改任何 Java 类,但我确实想避免 notNeededForMyDataServiceTest 的(有问题的)配置.

我试着做:
<bean id="myDataService"
class="MyDataServiceImpl">
<property name="notNeededForMyDataServiceTest"><null/></property>
</bean>

那行不通。 IntelliJ 通知我“无法解析属性 'notNeededForMyDataServiceTest'”,显然是因为该字段没有 getter 和 setter。

我正在使用 Spring Framework 3.1.3。

最佳答案

下面的配置应该可以了,我冒昧混入了Java配置

@Configuration
//This will load your beans from whichever xml file you are using
@ImportResource("classpath:/path/beans.xml")
public class TestConfigLoader{
// This will declare the unused bean and inject MyDataServiceImpl with null.
public @Bean(name="notNeededForMyDataServiceTest") NotNeededForMyDataServiceTest getNotNeededForMyDataServiceTest(){
return null;
}
... any other configuration beans if required.
}

并像这样注释你的测试类:
// In your test class applicationContext will be loaded from TestConfigLoader
@ContextConfiguration(classes = {TestConfigLoader.class})
public class MyTest {
// class body...
}

关于spring - 如何覆盖 Spring @Autowire 注释并将字段设置为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865999/

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