为什么我必须在Spring配置类中有一个由@Configuration注释注释的默认构造函数?

我正在学习Spring Core认证,在提供的学习材料上,我有这个问题,但我无法给出答案。

为什么必须在带注释的类@Configuration具有默认构造函数?

我不会在配置类中声明任何构造函数,这些构造函数由@Configuration注释注释。默认构造函数是超类继承的构造函数吗?还是什么?为什么我必须有一个默认构造函数,而我不能重写它?

断续器


答案 1

根据官方的spring javadoc,spring@Configuration带注释的类需要具有默认的no-arg构造函数。

@Configuration类必须具有默认/无参数构造函数,并且不能使用@Autowired构造函数参数。任何嵌套配置类都必须是静态的

原因是spring使用CGLIB来代理@Configuration类,并且在Spring中存在限制,即在版本4之前用CGLIB代理的类需要具有默认的no-args构造函数

在 Spring 4 之前,基于 CGLIB 的代理类需要默认构造函数。这不是CGLYB库的限制,而是Spring本身。幸运的是,从春季4开始,这不再是一个问题。基于 CGLIB 的代理类不再需要默认构造函数。


答案 2

推荐