我已经看到了与此问题相关的其他问题,但这些问题实际上都没有解决我的问题。
我在测试类中定义了这两个属性。
@Autowired
private MessagingProperties messagingProperties;
@Autowired
private MessagingPropertiesRefactor messagingPropertiesRefactor;
我正在尝试创建新版本的 MessagingProperties.java 。我基本上复制了这个类并创建了一个新文件 MessagingPropertiesRefactor.java (相同的包/ dir)并粘贴了相同的代码。我更改了类定义等,但大部分都是相同的。
我收到IntelliJ设计时编译错误,指出"无法自动装配。没有MessagingPropertiesRefactor' MessagingPropertiesRefactor'找不到类型。"
然后我搜索了原始类的每一个用法,以仔细检查它是否已在某处声明但我什么也没找到。
我是"新"到Java(和Spring)。有没有人遇到过同样的问题?
答案 0 :(得分:2)
如果您的新班级 MessagingPropertiesRefactor 未使用@Component
进行注释,则必须在 beans.xml 中声明它,如下所示:
<beans>
<bean name="messagingPropertiesRefactor" class="com.package.path.MessagingPropertiesRefactor"/>
</beans>
或在你的 AppConfig.java 中:
@Configuration
public class AppConfig {
@Bean
public MessagingPropertiesRefactor messagingPropertiesRefactor() {
return new MessagingPropertiesRefactor();
}
}
答案 1 :(得分:1)
如果要在测试中应用Spring依赖注入,则有2个基本选项:
如果要在XML中声明bean,请在XML文件中声明MessagingProperties
和MessagingPropertiesRefactor
,并按以下方式注释测试类:
@RunWith(SpringRunner.class)
@ContextConfiguration("your.xml")
应该成功自动装配bean。
要在JavaConfig中声明bean,请执行以下操作
2.1。像这样注释你的测试类:
@RunWith(SpringRunner.class)
@ContextConfiguration
2.2。在测试类中,定义用于缩小所需bean的上下文配置类:
@Configuration
static class Config {
@Bean
public MessagingProperties messagingProperties() {
// Assuming MessagingProperties has default ctor.
return new MessagingProperties();
}
// Same for MessagingPropertiesRefactor
}
享受自动装配的豆子:) * config类不必嵌套到测试类中。
有关该主题的更多信息,请参阅Spring文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-javaconfig,第3.5.4节。上下文管理。
答案 2 :(得分:0)
确保MessagingPropertiesRefactor
已将所有注释应用于MessagingProperties
所拥有的类。如果有,则在项目的xml配置中查找MessagingProperties
的bean定义并制作副本。
答案 3 :(得分:0)
所以,我找到了“神奇”的代码行,使其成为“bean”。
@EnableConfigurationProperties({MessagingProperties.class, MessagingPropertiesRefactor.class})
public class MessagingConfiguration {
@Autowired
private MessagingProperties messagingProperties;
@Autowired
private MessagingPropertiesRefactor messagingProperties;
所以,显然我需要做的就是将这个类添加到@EnableConfigurationProperties属性中。然后我可以使用@Autowired属性来使用它。
现在......为什么或如何,我不知道(就像我说的,我是java的“新手”)我希望有人能详细说明这一点。