【发布时间】:2014-09-03 14:16:03
【问题描述】:
春季文档:
每个类只能标记一个带注释的构造函数,但可以注释多个非必需的构造函数。
如果我有一个自动装配的构造函数,一切都很好。如果我有两个或更多自动装配,但 required=false 带注释的构造函数,一切都很好。但是,如果我以某种方式混合它们,例如有一个或多个 required=false 构造函数自动装配注释,并且恰好有一个 required=true,则会引发异常。
org.springframework.beans.factory.BeanCreationException:自动标记的构造函数无效:public annotationconfig.SomeBean(annotationconfig.AnotherBean)。找到另一个带有“必需”自动装配注释的构造函数:public annotationconfig.SomeBean(annotationconfig.AnotherBean,annotationconfig.AnotherBean[])
这是预期的行为吗?我是否缺少有关 Spring 依赖注入如何工作的信息?如果这是正常的,为什么这是 Spring 的问题,为什么它不能处理这样的设置?
【问题讨论】:
-
你能发布你的源代码吗?
-
您始终可以退回到对字段进行注释,而不是构造函数将字段注释标记为 required=false 并延迟加载变量。 HTH
-
@Component public class Account { private Card card; private AtmCard card1; @Autowired(required=true) public Account(Card card) { System.out.println(" in constructor"); this.card = card; } @Autowired(required=false) public Account(Card card, AtmCard card1) { System.out.println(" in setterr"); this.card = card; this.card1 = card1; } }错误Error creating bean with name 'account': Invalid autowire-marked constructor: public Account(Card,AtmCard). Found constructor with 'required' Autowired annotation already: public Account(Card)请帮助解决这个问题
标签: spring constructor autowired required