誠然,固然世界上大部分 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 開發控制檯程序,就是實現個接口,其餘照舊便可。