gpt4 book ai didi

java - @AllArgsConstructor 不使用 spring bean

转载 作者:行者123 更新时间:2023-12-04 07:40:33 28 4
gpt4 key购买 nike

我正在上这样的课

@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 文件并复制限定符注释,这也没有帮助。

spring 版本是 3.2.15。 Lombok 版本 1.18.16

它在下面工作正常

@Autowired
public TestController(@Qualifier("userDAO") final Test testDAO) {
this.testDAO = testDAO;
}

如何解决?

最佳答案

仅添加一个@AllArgsConstructor 是不够的,因为它会添加构造函数它不会添加@Autowired。因为缺少 Spring 将寻找默认构造函数。

要修复你可以做 3 件事中的 1 件事

  1. 升级到 Spring 4.3 或更高版本,因为它将自动使用单个构造函数并 Autowiring 它
  2. 指示 lombok 将 @Autowired 添加到构造函数中。
  3. 抛弃 lombok,只自己提供构造函数。

第一个应该很简单(在您的依赖项中包含更新版本的 Spring)。第二个需要一些额外的代码。

@Controller
@RequestMapping(value = "/test")
@AllArgsConstructor(onConstructor = @__(@Autowired))
public class TestController {

private final Test testDAO;

}

@Qualifier 将不起作用(并且应该被删除),因为它应该在构造函数参数上。

在这种情况下,我会放弃 Lombok,只添加构造函数(选项 3)。

@Controller
@RequestMapping(value = "/test")
public class TestController {

private final Test testDAO;

@Autowired
public TestController(@Qualifier("userDAO") Test testDao) {
this.testDao=testDao;
}
}

关于java - @AllArgsConstructor 不使用 spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67501854/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com