有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@AllArgsConstructor不使用Springbean

我正在上下面的课

@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

我还尝试添加龙目山。配置文件,并复制了限定符注释,这也没有帮助

spring版本是3.2.15。lombok版本1.18.16

它在下面工作得很好

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

如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

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

    要修复此问题,您可以执行以下三种操作之一

    1. 升级到Spring4.3或更高版本,因为这将自动使用单个构造函数并自动连接它
    2. 指示lombok将@Autowired添加到构造函数中
    3. 放弃龙目山,自己提供构造器

    第一个应该很简单(在依赖项中包含一个较新版本的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;
        }
    }