当前位置: 首页 > 知识库问答 >
问题:

类编译并通过测试,但是Spring抛出发布到应用服务器时没有找到默认构造函数的错误

尤钱明
2023-03-14

配置:

@Configuration
public class CoreConfig {

    @Bean
    public StatusService statusService(StatusPersistenceService statusPersistenceService) {
        return new StatusEventHandler(statusPersistenceService);
    }
}

类Spring抱怨没有默认构造函数

@Configuration
public class StatusEventHandler implements StatusService {

    private final StatusPersistenceService statusPersistenceService;

    @Autowired
    public StatusEventHandler(final StatusPersistenceService statusPersistenceService) {
        this.statusPersistenceService = statusPersistenceService;
    }

}

注入此bean的控制器:

@Controller
@RequestMapping("/showStatus")
public class ShowStatusController {

    @Autowired
    private StatusService statusService;

}

这将编译并测试通过,但是当发布到应用程序服务器时,我收到以下错误。为什么 Spring 认为应该有一个默认的无参数构造函数?

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'statusEventHandler' 

...

No default constructor found;

共有2个答案

长孙鸿
2023-03-14

您是否在StatusEventHandler中给出了@Component或@Service注释?请尝试这样做。

董子航
2023-03-14

来自@Configurationjavadoc:

@Configuration是用@Component进行元注释的,因此@Configuration类是组件扫描的候选对象(通常使用Spring XML的元素),因此也可以在字段和方法级别利用@Autowired/@Inject(但不是在构造函数级别)。

@Component@Service是更适合服务的注释,实际上它们的处理方式不同,但在这种情况下,您已经使用@Bean声明了您的bean,因此您不需要使用@Component,也不需要任何其他组件扫描注释(@Service、@Repository等),因为StatusService bean已经通过@Bean注释方法定义。

正如Sotirios Delimanolis所指出的,Spring process @Bean注释的方法不应该包含参数

   @Configuration
   public class CoreConfig {
     @Bean
     public StatusPersistenceService statusPersistenceService(){
     ....
     }

     @Bean
     public StatusService statusService() {
        return new StatusEventHandler(statusPersistenceService());
    }
 }

看见http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/annotation/Bean.html

 类似资料:
  • Spring靴和jpa给出了错误 项目的github链接https://github.com/dishankgoyal/springsBoot/tree/master/faculty_project

  • 因此,我有了类、、和。由于类有很多setter和getter,所以我决定将代码放在pastebin中: LogBookEntry 驱动程序 数据库 汽车 因此,正如您在数据库中所看到的,我有两个函数来加载和保存XML数据。 如您所见,类的日期不会保存到XML文件中。这就是为什么我在加载xml文件时会出现以下错误的原因: Okt 22,2017 3:36:33 PM com.sun.xml.inte

  • 我想映射到一个源目标,它只有一个接受3个参数的构造函数。我得到以下错误: 无法实例化目标com的实例。诺瓦索尔。bookingflow。应用程序编程接口。实体。顺序速度确保com。诺瓦索尔。bookingflow。应用程序编程接口。实体。顺序速率具有非私有无参数构造函数。 当我在源目标中插入一个无参数构造函数时,它可以工作,但这可能会导致类的误用,所以我不希望这样。 我曾尝试使用转换器,但似乎不起

  • 问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题

  • 问题内容: 我最近在一个类中看到了这个构造函数: 没有其他构造函数。 是否有一个原因?Java自动创建一个默认的构造函数,那么为什么要显式声明一个呢?还是以与将大括号用于单语句if语句相同的方式视为一种好习惯- 如果以后添加其他构造函数而您忘记了没有默认值…? 问题答案: 有几点要点,不太可能是您在这种情况下看到它的原因。 它为您提供了设置断点的方法。 您可以将其设为非公开 至于“以防以后添加其他

  • 我有一个自定义的参数解析器,它在Spring 3.0.7中工作,但在Spring 3.1.2中失败。下面显示堆栈跟踪和测试驱动程序代码。 当我查看堆栈跟踪时,似乎没有调用。相反,我在堆栈跟踪中看到。 建议? 最后...这里是Spring配置中的注释驱动标记