Spring多个@Configuration组件扫描模糊

时间:2016-04-28 11:12:09

标签: spring dependency-injection configuration inversion-of-control autowired

我注意到在处理多个@Configuration文件时,组件扫描和bean创建存在歧义。

假设我有方法级安全性的配置,它需要扫描包含需要代理AOP的类的包。这些类依赖于其他类,也是其他类的依赖项。

一切正常,直到我在不同的配置中扫描同一个包,例如root配置。然后开始出现诸如循环依赖 bean in creation 之类的异常。似乎root配置也试图实例化相同的对象,但当然不能这样做,因为在某些时候AOP代理无法在此配置路径中应用,并且无法满足依赖性。

如果我最终准确地扫描了什么,那么一切都有效,但我很惊讶Spring无法自动编排bean创建顺序。这是真的吗,还是有什么可疑的事情?

1 个答案:

答案 0 :(得分:1)

这不是腥。 bean存储在AppContext中。 spring的设计就像:你可以在同一个上下文中拥有同一个类的两个实例!如果通过配置两次配置MyService,应该自动连接哪个实例? 见这个例子:

@Autowired
private final MyService myService = null;

由于您的扫描工作了两次,您有两个可能的候选用于注入,而spring不能自动装配并给出异常(在这种情况下,spring寻找@Primary - Annotation,但是因为你扫描了两次你有@Primary两次 - 所以在这种情况下可能没有用。)

让客户选择正确的服务是有效的:

@Autowired
private final MyService[] myServices = null;

这样可行,您拥有数组中的所有实例。

另一种选择是在同一个应用程序中有两个不同的AppContexts。