@AllArgsConstructor 不使用 spring bean
@AllArgsConstructor not working with spring bean
我有如下 class
@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。龙目岛版本 1.18.16
它在以下情况下工作正常
@Autowired
public TestController(@Qualifier("userDAO") final Test testDAO) {
this.testDAO = testDAO;
}
如何解决?
仅添加 @AllArgsConstructor
是不够的,因为它会添加构造函数 但 它不会添加 @Autowired
。因为缺少 Spring 将查找默认构造函数。
要修复,您可以执行以下 3 项操作中的一项
- 升级到 Spring 4.3 或更高版本,因为它将自动使用单个构造函数并自动装配它
- 指示lombok在构造函数中添加
@Autowired
。
- 放弃 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;
}
}
我有如下 class
@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。龙目岛版本 1.18.16
它在以下情况下工作正常
@Autowired
public TestController(@Qualifier("userDAO") final Test testDAO) {
this.testDAO = testDAO;
}
如何解决?
仅添加 @AllArgsConstructor
是不够的,因为它会添加构造函数 但 它不会添加 @Autowired
。因为缺少 Spring 将查找默认构造函数。
要修复,您可以执行以下 3 项操作中的一项
- 升级到 Spring 4.3 或更高版本,因为它将自动使用单个构造函数并自动装配它
- 指示lombok在构造函数中添加
@Autowired
。 - 放弃 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;
}
}