自定义SpringApplication
如果SpringApplication
的默认值不满足我们的需求,可以创建SpringApplication
实例并对其进行自定义设置,例如,要关闭横幅:
package com.kaven.springboot;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringbootApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}
SpringApplication
是可用于从main
方法引导和启动Spring
应用程序的类,默认情况下,该类将执行以下步骤来引导应用程序:
- 创建一个适当的
ApplicationContext
实例。 - 注册一个
CommandLinePropertySource
以将命令行参数公开为Spring
属性。 - 刷新应用程序上下文,加载所有单例
bean
。 - 触发所有
CommandLineRunner bean
。
在大多数情况下,可以直接在main
方法中调用静态run(Class, String[])
方法来引导应用程序:
package com.kaven.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
对于更高级的配置,可以在应用程序运行之前创建和自定义设置SpringApplication
实例:
package com.kaven.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringbootApplication.class);
// 配置SpringApplication实例
application.run(args);
}
}
SpringApplication
可以从各种不同的源读取bean
,通常建议使用单个@Configuration
类(如Spring Boot
的启动类,即使用@SpringBootApplication
注解的类,@SpringBootApplication
注解组合了@EnableAutoConfiguration
、@ComponentScan
以及@SpringBootConfiguration
等注解)来引导应用程序。
SpringApplication application = new SpringApplication(SpringbootApplication.class);
也可以通过以下内容来设置sources
:
-
AnnotatedBeanDefinitionReader
要加载的全限定类名。 -
XmlBeanDefinitionReader
要加载的XML
资源位置,或者GroovyBeanDefinitionReader
要加载的groovy
脚本位置。 -
ClassPathBeanDefinitionScanner
要扫描的包名称。
通过SpringApplication
类的setSources
方法来设置sources
:
/**
* 设置用于创建ApplicationContext的其他源
* 源可以是:类名、包名或XML资源位置
*/
public void setSources(Set<String> sources) {
Assert.notNull(sources, "Sources must not be null");
this.sources = new LinkedHashSet<>(sources);
}
配置属性也会绑定到SpringApplication
,这使得动态设置SpringApplication
属性成为可能。
Builder API
如果需要构建ApplicationContext
层次结构(具有父子关系的多个上下文),或者喜欢使用Builder API
,就可以使用SpringApplicationBuilder
。SpringApplicationBuilder
允许将多个方法调用链接在一起,并包括父方法和子方法,用于创建层次结构。
SpringApplication
和ApplicationContext
实例的构建器,具有方便的Builder API
和上下文层次结构支持。上下文层次结构的简单示例:
new SpringApplicationBuilder(ParentConfig.class)
.child(ChildConfig.class)
.run(args);
另一个常见用例是设置激活配置文件和默认属性以设置应用程序的环境:
new SpringApplicationBuilder(Application.class)
.profiles("test")
.properties("password=itkaven")
.run(args);
如果需求很简单,使用SpringApplication
类中的静态方法即可。创建ApplicationContext
层次结构时有一些限制,例如,Web
组件必须包含在子上下文中,并且父上下文和子上下文都使用相同的环境。
自定义SpringApplication
就介绍到这里,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。