无法自动装配。没有MessagingPropertiesRefactor' MessagingPropertiesRefactor'找不到类型

时间:2017-12-06 20:05:58

标签: java spring-boot autowired spring-bean

我已经看到了与此问题相关的其他问题,但这些问题实际上都没有解决我的问题。

我在测试类中定义了这两个属性。

  @Autowired  
  private MessagingProperties messagingProperties;

  @Autowired
  private MessagingPropertiesRefactor messagingPropertiesRefactor;

我正在尝试创建新版本的 MessagingProperties.java 。我基本上复制了这个类并创建了一个新文件 MessagingPropertiesRefactor.java (相同的包/ dir)并粘贴了相同的代码。我更改了类定义等,但大部分都是相同的。

我收到IntelliJ设计时编译错误,指出"无法自动装配。没有MessagingPropertiesRefactor' MessagingPropertiesRefactor'找不到类型。"

然后我搜索了原始类的每一个用法,以仔细检查它是否已在某处声明但我什么也没找到。

我是"新"到Java(和Spring)。有没有人遇到过同样的问题?

4 个答案:

答案 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();
    }
}

Source Reference

答案 1 :(得分:1)

如果要在测试中应用Spring依赖注入,则有2个基本选项:

  1. 如果要在XML中声明bean,请在XML文件中声明MessagingPropertiesMessagingPropertiesRefactor,并按以下方式注释测试类:

    @RunWith(SpringRunner.class)    
    @ContextConfiguration("your.xml")
    

    应该成功自动装配bean。

  2. 要在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类不必嵌套到测试类中。

  3. 有关该主题的更多信息,请参阅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的“新手”)我希望有人能详细说明这一点。