微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

@AllArgsConstructor 不适用于 spring bean

如何解决@AllArgsConstructor 不适用于 spring bean

我正在上课

@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

我也尝试在 root 中添加 lombok.config 文件并复制了 Qualifier 注释,这也没有帮助。

spring 版本是 3.2.15。龙目岛版本 1.18.16

它在下面工作正常

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

如何解决这个问题?

解决方法

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

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

  1. 升级到 Spring 4.3 或更高版本,因为这将自动使用单个构造函数并自动装配
  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;
    }
} 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。