来自jar问题的Spring Boot Scanning Classes

时间:2016-01-05 10:06:37

标签: spring spring-mvc spring-boot

在我的示例Spring启动应用程序中,我添加了自定义jar的依赖项。我的示例应用程序支持web和jpa。

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

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

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

问题 - 当我通过运行主类启动我的spring启动应用程序时,我在控制台中出现错误,同时自动装配DefaultMessageListenerContainer。

我的问题是,即使这个类StartStopDefaultMessageListenerContainerController只存在于类路径中,也不应该创建它的bean并且不应该发生自动装配。但春季启动是自动扫描类,然后它尝试自动连接字段。

这是春天的正常行为吗?无论如何我可以避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

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

此处您的问题是 @Autowired 收集。春天docs说,

  

本身定义为集合或地图类型的Bean无法通过@Autowired注入,因为类型匹配不适用于它们。将@Resource用于此类bean,以唯一名称引用特定集合或映射bean。

另请参阅inject-empty-map-via-spring