加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

创建名为’application’的bean时出错,找不到默认构造函数;嵌套

发布时间:2020-12-15 04:35:58 所属栏目:Java 来源:网络整理
导读:我不太明白为什么这段代码给我“找不到默认构造函数”错误.构造函数是@Autowired.一切似乎都正确注入.有人可以帮忙吗?谢谢 @SpringBootApplicationpublic class Application { private ApplicationContext applicationContext; private MessagingService me
我不太明白为什么这段代码给我“找不到默认构造函数”错误.构造函数是@Autowired.一切似乎都正确注入.有人可以帮忙吗?谢谢

@SpringBootApplication
public class Application {

    private ApplicationContext applicationContext;
    private MessagingService messagingService;
    private Parser parser;

    private static final Logger log = LoggerFactory.getLogger(Application.class);

    @Autowired
    public Application(ApplicationContext applicationContext,MessagingService messagingService,Parser parser)
    {
        this.applicationContext = applicationContext;
        Assert.notNull(messagingService,"MessagingService must not be null");
        this.messagingService = messagingService;
        Assert.notNull(parser,"Parser must not be null");
        this.parser = parser;
    }

    public static void main (String[] args) {
        SpringApplication.run(Application.class,args);
    }

    @Bean
    public CommandLineRunner app() {
        return args -> {
            Locale defaultLocale = Locale.getDefault();
            Locale.setDefault(defaultLocale);
            log.info("Using MessagingService: " + messagingService.getMyMessageCode());

            parser.parse();
        };
    }
}

编辑:更新的Application.class

@SpringBootApplication
public class Application {

    @Autowired
    private MessagingService messagingService;
    @Autowired
    private Parser parser;

    private static final Logger log = LoggerFactory.getLogger(Application.class);

    public Application() {}

    public static void main (String[] args) {
        SpringApplication.run(Application.class,args);
    }

    @Bean
    public CommandLineRunner app() {
        return args -> {
            Locale defaultLocale = Locale.getDefault();
            Locale.setDefault(defaultLocale);
            log.info("Using MessagingService: " + messagingService.getMyMessageCode());

            parser.parse();
        };
    }
}

解决方法

你不能自动装入主Spring Boot类.您可以将CommandLineRunner所需的依赖项注入作为使用@Bean注释的方法的参数,当然还要删除主类的构造函数注入:

@SpringBootApplication
public class Application {
    private static final Logger log = LoggerFactory.getLogger(Application.class);

    public static void main (String[] args) {
        SpringApplication.run(Application.class,args);
    }

    @Bean
    public CommandLineRunner app(ApplicationContext applicationContext,Parser parser) {
        return args -> {
            Locale defaultLocale = Locale.getDefault();
            Locale.setDefault(defaultLocale);
            log.info("Using MessagingService: " + messagingService.getMyMessageCode());

            parser.parse();
        };
    }
}

编辑:
编辑后更正上下文配置:

@SpringBootApplication
public class Application {

    private static final Logger log = LoggerFactory.getLogger(Application.class);

    public Application() {}

    public static void main (String[] args) {
        SpringApplication.run(Application.class,args);
    }

    @Bean
    public CommandLineRunner app(MessagingService messagingService,Parser parser) {
        return args -> {
            Locale defaultLocale = Locale.getDefault();
            Locale.setDefault(defaultLocale);
            log.info("Using MessagingService: " + messagingService.getMyMessageCode());

            parser.parse();
        };
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读