Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在@SpringBootApplication外部执行CommandLineRunner_Spring_Spring Boot - Fatal编程技术网

在@SpringBootApplication外部执行CommandLineRunner

在@SpringBootApplication外部执行CommandLineRunner,spring,spring-boot,Spring,Spring Boot,这是基于 我试图将demo()移动到另一个包中的另一个类中(Application仍然位于文件系统层次结构的顶部) 启动项目时如何使demo()运行 Application.java package com.company.app @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Applicat

这是基于 我试图将
demo()
移动到另一个包中的另一个类中(
Application
仍然位于文件系统层次结构的顶部)

启动项目时如何使
demo()
运行

Application.java

package com.company.app

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
          SpringApplication.run(Application.class);
  }
}
CommandLineRunner.java

package com.company.app.runner

public class Test {

    @Bean
    public CommandLineRunner demo() {
        System.out.print("Run 1");
        return (args) -> {
            System.out.print("Run 2");
        };
    }
}

@Configuration
添加到
测试
类中,以便在扫描类路径时拾取该类

我以前没有在CommandLineRunner上见过Lambda。非常漂亮,不必创建专门实现CommandLineRunner的类

否则,您可以实现CommandLineRunner来测试并注释为@Component

@Component
public class ApplicationLoader implements CommandLineRunner {

    @Override
    public void run(String... strings) throws Exception {
        System.out.print("Run 2");
    }
}
*更新* 用这个更新回答评论中的问题,因为我有更多的输入空间


@SpringBootApplication
按照您的指示组合其他注释,但这些注释仅应用于在其上定义的特定类。注释告诉Spring类定义了应该由应用程序上下文管理的bean。指示spring在类路径中查找具有特定注释的类(例如,
@组件
@服务
@配置
),然后根据注释类型对这些类执行操作。这是一种基于项目依赖项加载适当bean的魔法(例如,如果mongo驱动程序位于类路径上,则创建一个
MongoTemplate
)。

在测试类上方添加注释@Configuration。“SpringBootApplication注释相当于使用配置、EnableAutoConfiguration和ComponentScan及其默认属性”它可以工作,但我不明白为什么“@SpringBootApplication”不能自己完成这项工作,“SpringBootApplication注释相当于使用配置,EnableAutoConfiguration和ComponentScan及其默认属性”-这就是commandlinerunner在这个类中工作的原因,它有@Configuration