我正在攻读Spring Core认证,并且根据所提供的学习内容,我有这个问题,但我无法给出答案。
为什么必须在@Configuration中使用默认构造函数 注释类?
我没有将任何构造函数声明为由 @Configuration 注释注释的配置类。默认构造函数是超类继承的构造函数?或者是什么?为什么我必须有一个默认的构造函数,我不能覆盖它?
TNX
答案 0 :(得分:22)
根据official spring javadoc,spring @Configuration带注释的类需要具有默认的no-arg构造函数
@Configuration类必须具有default / no-arg构造函数,并且不能使用@Autowired构造函数参数。任何嵌套配置类都必须是静态的
原因是spring使用CGLIB to proxy @Configuration类,Spring中有限制that classes proxied with CGLIB prior to version 4 are required to have default no-args constructor。
在Spring 4之前,基于CGLIB的代理类需要一个默认构造函数。这不是CGLIB库的限制,而是Spring本身。幸运的是,从春季开始,这不再是一个问题。基于CGLIB的代理类不再需要默认构造函数。