诚然,当然世界上大部分 Spring Boot 程序是 Web 程序。将视线离开 Web 并放大到整个程序世界,则必将看到控制台程序是更基础也更广泛的一类程序。
用 Java 编写的控制台程序也可以享受 Spring Boot 带来的好处。
以 Spring Boot 为基础开发控制台程序,需要实现一个接口
@FunctionalInterface
public interface CommandLineRunner {
void run(String... args) throws Exception;
}
例如:
class DartApplication implements CommandLineRunner {
@Override
public void run(String... args) {
System.out.println("程序实际上的入口在这里。");
}
}
将这个类加上 @SpringBootApplication 注解,然后编写一个带主函数的类就可以了。
@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 开发控制台程序,就是实现个接口,其他照旧即可。