Run()上的Spring Boot语法

时间:2018-12-19 07:40:50

标签: spring-boot

为什么Spring Framework要求开发人员从被调用的地方像

那样显式地编写类名。
SpringApplication.run(ClassA.class, args);

对于Spec专家和编译器来说,使用类似这样的语法会更加容易和整洁

SpringApplication.run(args);

该类隐式为当前类。

2 个答案:

答案 0 :(得分:2)

main类内创建@SpringBootApplication方法不是强制性的。因此,通过在SpringApplication.run方法中提供class参数,可以指定应加载的类。

例如:

@SpringBootApplication
public class MySpringApplication {
    //no main method here
}

还有

public class AppStarter {
    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(MySpringApplication.class, args);
    }
}

答案 1 :(得分:1)

SpringApplication.run(args);将如何完全引用“当前”类?这是一个静态方法,因此不能仅调用getClass()并将其用作隐式参数。

它可以做的是猜测,例如通过获取当前的堆栈跟踪信息

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

并迭代堆栈跟踪元素,直到找到一些带有注释的@SpringBootApplication类。但是对我来说,这似乎有点脆弱,因为这不是很直观,并且很容易通过重构来解决。除了已经指出的以外,调用SpringApplication.run(args);的类绝不是实际的spring应用程序。