什么是启动简单的非基于Web的Java应用程序的官方spring引导方式?

San*_*r_M 8 java spring dependency-injection autowired spring-boot

我正处于将简单的java项目转换为spring引导变体的过程中.Spring引用参考指南http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/一般都非常有用,但是大多数设置简单配置的例子都涉及一些基于Web的应用程序.来自https://spring.io/guides/gs/spring-boot/教程的入门教程没有提供我正在寻找的答案.

我有一个类HelloSpring需要运行一个方法printHello().为了简单起见,我已经配置了以下类,放在同一个包中:

Application.class

@SpringBootApplication
public class Application {

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

}
Run Code Online (Sandbox Code Playgroud)

HelloConfiguration.class

@Configuration
public class HelloConfiguration {

    @Bean
    public HelloSpring helloSpring(){
        HelloSpring hs = new HelloSpring();
        hs.printHello();
        hs.printHelloAgain();
        return hs;
    }

    @Autowired
    public HelloSpring hs;

}
Run Code Online (Sandbox Code Playgroud)

HelloSpring.class

public class HelloSpring {

    public void printHello() {
        System.out.println("Hello Spring!");
    }

    @PostConstruct
    public void printHelloAgain() {
        System.out.println("Hello Spring?");
    }

}
Run Code Online (Sandbox Code Playgroud)

它打印(省略弹簧记录):

Hello Spring!
Hello Spring?
Hello Spring?
Run Code Online (Sandbox Code Playgroud)

但是,我不确定执行HelloSpring类的正确方法.

在上面的示例中,使用spring boot时连接和"运行"类的官方方法是什么?

Flo*_*etz 7

只需使用ApplicationContextSpringApplication.run返回,然后与工作.这几乎是所需要的

public static void main(String[] args) {
    ApplicationContext context = SpringApplication.run(Application.class, args);
    HelloSpring bean = context.getBean(HelloSpring.class);
    bean.printHello();
}
Run Code Online (Sandbox Code Playgroud)

所以你可以打开一个gui等,并使用ApplicationContext来获取你的bean等.


Sha*_*ark 5

来自文档:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-command-line-runner

Application.class

@SpringBootApplication
public class Application {

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

}
Run Code Online (Sandbox Code Playgroud)

HelloSpring.class

@Component
public class HelloSpring implements CommandLineRunner {
    @Override
    public void run(String... args) {
        this.printHello();
    }

    public void printHello() {
        System.out.println("Hello Spring!");
    }
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以使它成为run()方法实际打印出您的消息,但这样可以使它更接近您实现方法的意图,并希望它在应用程序启动时执行.