无法自动连线。未找到"消息传递属性重构"类型的 bean



我已经看到了与此问题有关的其他问题,但实际上没有一个有助于我的问题。

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

  @Autowired  
  private MessagingProperties messagingProperties;
  @Autowired
  private MessagingPropertiesRefactor messagingPropertiesRefactor;

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

我得到了一个Intellij设计时间编译器错误,说"无法自动。

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

我是Java(和Spring)的"新"。有人之前遇到过同一问题吗?

如果您的新类 MessagingPropertiesRefactor 未用@Component注释您,您必须在 beans.xml 中必须声明它。/p>

<beans>
    <bean name="messagingPropertiesRefactor" class="com.package.path.MessagingPropertiesRefactor"/>
</beans>

或在您的 AppConfig.java 中>

@Configuration
public class AppConfig {
    @Bean
    public MessagingPropertiesRefactor messagingPropertiesRefactor() {
        return new MessagingPropertiesRefactor();
    }
}

源参考

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

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

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

    豆子应成功自动自动。

  2. 在Javaconfig中宣布豆子,请执行以下

    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
    }
    

    享受自动豆:)
    *配置类不必嵌套到测试类中。

有关该主题的更多信息,请咨询弹簧文档:https://docs.spring.io/spring/spring/docs/current/spring-framework-work-framework-reference/testing.html#testcontext-contx-contx-ctx-management-management-management-management-management-management-javaconfig,章节,一章3.5.4。上下文管理。

确保MessagingPropertiesRefactor的所有注释应用于MessagingProperties具有的类。如果有的话,那么在XML配置中为您的项目中查找MessagingProperties的bean定义并制作副本。

所以,我找到了使其成为" bean"的"魔术"线。

@EnableConfigurationProperties({MessagingProperties.class, MessagingPropertiesRefactor.class})
public class MessagingConfiguration {
@Autowired
  private MessagingProperties messagingProperties;
@Autowired
  private MessagingPropertiesRefactor messagingProperties;

因此,显然我要做的就是将此类添加到@enableconfigurationProperties属性中。然后,我可以通过使用@Autowired属性来使用它。

现在...为什么或如何,我不知道(就像我说的那样,我对Java"新"),我希望有人详细说明。

最新更新