【发布时间】:2021-08-02 17:04:23
【问题描述】:
我正在上课,如下所示
@Controller
@RequestMapping(value = "/test")
@AllArgsConstructor
public class TestController {
@Qualifier("userDAO")
private final Test testDAO;
}
下面是我的bean注册
<bean id="userDAO" class="com.test.dao.TestImpl"
p:sqlSessionFactory-ref="testSqlSessionFactory" />
当我运行我的应用程序时出现如下错误
No default constructor found; nested exception is java.lang.NoSuchMethodException bean configuration
我还尝试在根目录中添加 lombok.config 文件并复制 Qualifier 注释,这也没有帮助。
春季版本是 3.2.15。 lombok 版本 1.18.16
下面的效果很好
@Autowired
public TestController(@Qualifier("userDAO") final Test testDAO) {
this.testDAO = testDAO;
}
如何解决?
【问题讨论】:
-
'default constructor' 指的是带有 no 参数的构造函数;据我所知,与
@AllArgs正好相反。 -
只需将
@AllArgsConstructor更改为@NoArgsConstructor即可进行注入。 -
你看过这个吗,看起来与你的问题非常相似:stackoverflow.com/questions/38549657/… 你可以尝试快速修复 Алексей Виноградов 在那里提出的或被接受的答案更长的解决方案。
-
我尝试使用带有
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier的 lombok.config 文件,但也没有用 -
仅添加
@AllArgsConstructor是不够的,因为它会添加构造函数但它不会添加@Autowired。因为缺少它,它将寻找默认构造函数。您还需要指示 lombok 将@Autowired添加到构造函数中。或者升级到 Spring 4.3 或更高版本,它将自动检测单个构造函数并使用它。
标签: java spring spring-mvc lombok spring-annotations