Spring 文档:
Only one annotated constructor per-class can be marked as required, but multiple non-required constructors can be annotated.
如果我有一个 Autowiring 的构造函数,一切都很好。如果我有两个或更多 Autowiring ,但 required=false 带注释的构造函数,一切都很好。但是,如果我以某种方式混合它们,例如有一个或多个 required=false 构造函数 Autowiring 注释,并且恰好有一个 required=true,它会引发异常。
org.springframework.beans.factory.BeanCreationException: Invalid autowire-marked constructor: public annotationconfig.SomeBean(annotationconfig.AnotherBean). Found another constructor with 'required' Autowired annotation: public annotationconfig.SomeBean(annotationconfig.AnotherBean,annotationconfig.AnotherBean[])
这是预期的行为吗?我是否缺少有关 Spring 依赖注入(inject)如何工作的信息?如果这是正常的,为什么这是 Spring 的问题,为什么它不能处理这样的设置?
请您参考如下方法:
我认为这种行为的原因是,如果其中一个构造函数有 @Autowired(required=true)
那么它必须被调用(因为它是必需的)并且因为每个对象实例化只能调用一个构造函数然后让其他构造函数使用 有什么意义? @Autowired(required=false)
?
无论如何,它们不会被 Autowiring ,因为已经需要构造函数之一并且必须调用它们。它们仍然可以在不使用 Autowired 机制的情况下调用,但在这种情况下 @Autowired(required=false)
注释是不必要的。