来自jars的Spring Boot扫描类问题



在我的示例spring-boot应用程序中,我添加了一个自定义jar的依赖项。我的示例应用程序支持web和jpa。

我创建的jar包含一个Spring MVC控制器。下面是示例代码

@Controller
public class StartStopDefaultMessageListenerContainerController {
    @Autowired(required=false)
    private Map<String, DefaultMessageListenerContainer> messageListeners;

我还没有在代码中的任何地方手动创建这个控制器的bean实例。

问题-当我通过运行主类启动春季启动应用程序时,我在控制台中收到一个错误,该错误在自动连接DefaultMessageListenerContainer时出现。

我的问题是,即使这个类StartStopDefaultMessageListenerContainerController只是出现在类路径中,它的bean也不应该被创建,自动布线也不应该发生。但是spring-boot会自动扫描类,然后尝试自动连接字段。

这是春天的正常行为吗?我能避免这种情况吗?

如果StartStopDefaultMessageListenerContainerController类是弹簧容器component scanning的一部分,Yes弹簧会尝试实例化并解析所有依赖项。

这里的问题是集合上的@Autowired。春季医生说,

本身被定义为集合或映射类型的Bean不能通过@Autowired注入,因为类型匹配不适用于它们。对这样的bean使用@Resource,通过唯一的名称引用特定的集合或映射bean。

也可参考通过弹簧注入空映射

最新更新