为什么Spring Framework要求开发人员从被调用的地方像
那样显式地编写类名。SpringApplication.run(ClassA.class, args);
对于Spec专家和编译器来说,使用类似这样的语法会更加容易和整洁
SpringApplication.run(args);
该类隐式为当前类。
答案 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应用程序。