基於 Spring Boot 編寫控制檯程序

誠然,固然世界上大部分 Spring Boot 程序是 Web 程序。將視線離開 Web 並放大到整個程序世界,則必將看到控制檯程序是更基礎也更普遍的一類程序。java

用 Java 編寫的控制檯程序也能夠享受 Spring Boot 帶來的好處。spring

以 Spring Boot 爲基礎開發控制檯程序,須要先引入一個 startermongodb

Mavenide

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>

Gradle函數

implementation('org.springframework.boot:spring-boot-starter')

固然,若是項目所使用的 starter 已經包含了 spring-boot-starter(例如:spring-boot-starter-data-mongodb),則不須要專門引入 spring-boot-starter。spring-boot

再實現一個接口this

@FunctionalInterface
public interface CommandLineRunner {
    void run(String... args) throws Exception;
}

例如:code

class DartApplication implements CommandLineRunner {
    @Override
    public void run(String... args) {
        System.out.println("程序實際上的入口在這裏。");
    }
}

將這個類加上 @SpringBootApplication 註解,而後編寫一個帶主函數的類就能夠了。xml

@SpringBootApplication
class DartApplication implements CommandLineRunner {
    @Override
    public void run(String... args) {
        System.out.println("程序實際上的入口在這裏。");
    }
}

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

固然,把主函數放進 DartApplication 裏面也能夠接口

@SpringBootApplication
public class DartApplication implements CommandLineRunner {
    public static void main(String[] args) {
        SpringApplication.run(DartApplication.class, args);
    }
    
    @Override
    public void run(String... args) {
        System.out.println("程序實際上的入口在這裏。");
    }
}

Spring 提供的註解,Spring Boot 提供的方便的 starter,在這裏仍然能用。

例如自動裝配:

@Component
class Diablo {
    void firenova() {
        System.out.println("釋放烈火新星");
    }
}

@SpringBootApplication
public class DartApplication implements CommandLineRunner {

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

    @Autowired
    public DartApplication(Diablo diablo) {
        this.diablo = diablo;
    }

    private final Diablo diablo;

    @Override
    public void run(String... args) {
        this.diablo.firenova();
    }
}

總之,基於 Spring Boot 開發控制檯程序,就是實現個接口,其餘照舊便可。

相關文章
相關標籤/搜索