我注意到在处理多个@Configuration文件时,组件扫描和bean创建的模糊性。
假设我有方法级安全性的配置,它需要扫描包含需要被AOP代理的类的包。这些类依赖于其他类,也是其他类的依赖项。
一切正常工作,直到我扫描相同的包,在不同的配置,如在根配置。然后,循环依赖和创建中的bean之类的异常开始出现。看起来根配置也试图实例化相同的对象,但是当然不能这样做,因为在某些时候AOP代理不能应用到这个配置路径中,并且依赖关系也不能满足。
如果我最终准确地扫描了什么,那么一切都能正常工作,但我很惊讶Spring不能自动编排bean创建顺序。是真的是这样还是有什么可疑的事情发生了?
发布于 2016-04-28 12:00:17
这一点都不可疑。beans存储在AppContext中。spring的设计是这样的:您可以在相同的上下文中拥有同一个类的两个实例!如果您通过配置配置MyService两次,那么应该自动配置哪个实例?参见此示例:
@Autowired
private final MyService myService = null;因为您的扫描工作了两次,您有两种可能的注入选择,spring不能自动释放并给出一个异常(在本例中,spring查找一个@Primary-Annotation,但是因为您扫描了两次,所以在这种情况下它可能没有帮助)。
让客户端选择如下正确的服务是可行的:
@Autowired
private final MyService[] myServices = null;这是可行的,数组中有所有的实例。
另一个选项是在同一个应用程序中有两个不同的AppContexts。
https://stackoverflow.com/questions/36912933
复制相似问题