【问题标题】:@AllArgsConstructor not working with spring bean@AllArgsConstructor 不使用spring bean
【发布时间】: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


【解决方案1】:

仅添加@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;
    }
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2018-07-24
    • 1970-01-01
    • 2017-10-28
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多