03、SpringBoot应用程序主类
应用程序主类说明
一般在书写SpringBoot项目的时候通常建议将应用程序主类放到其他类之上的根包中。@EnbaleAutoConfiguration注解通常放置在主类上,它隐式的定义了某些基本搜索包。 例如,如果您正在编写JPA应用程序,则@EnableAutoConfiguration注解类的包将用于搜索@Entity项。
使用根包(root package)还可以使用@ComponentScan注释,而不需要指定basePackage属性(因为默认会扫描主类下所有的包)。 如果您的主类在根包中,也可以使用@SpringBootApplication注释。
如下图所示:Application就是应用程序主类
image.png
Application.java文件将声明main方法以及基本的@Configuration。
package com.yubin.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* SpringBoot 主应用程序类
*
* @Author YUBIN
* @create 2019-06-09
*/
@ComponentScan // 开启包扫描
@EnableAutoConfiguration // 开启自动配置
@Configuration // 申明当前类为配置类
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
到这里也许你会询问,难道我的每一个应用程序都需要在应用程序主类上加上@EnableAutoConfiguration、@CompontScan、@Configuration这3个注解么,答案是否定的,SpringBoot提供了一个方便的@SpringBootApplication注解作为这个三个的替代方法。
@SpringBootApplication // 相当于 @ComponentScan,@EnableAutoConfiguration,@Configuration这三个注解
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication还提供了别名来定制@EnableAutoConfiguration和@ComponentScan的属性
配置类
Spring Boot支持基于Java的配置。虽然可以使用XML配置用SpringApplication.run(),但我们通常建议您的主source是@Configuration类。 通常,定义main方法的类也是作为主要的@Configuration一个很好的选择。
(1)、导入其他配置类
在实际项目中可能不会把所有的配置都放在一个配置类(用@Configuration注解的类)中,可能会分开配置。这时可以用@Import注解引用(@Import(value = {***.class}))。@Import注解可用于导入其他配置类。 或者,您可以使用@ComponentScan自动扫描所有Spring组件,包括@Configuration类。
(2)、导入xml配置
如果在你的项目中需要用到xml配置文件,或者你还不习惯java配置的方式,那么你可以通过在入口启动类上加上@ImportResource(value = { "路径" })或者使用@ImportResource(locations= { "路径" }),一样的效果,多个XML文件的话你可以用逗号“,”分隔,就这样轻而易举的引用XML配置。
(3)、自动配置
Spring Boot 会根据您添加的jar依赖关系自动配置您的Spring应用程序。例如,如果HSQLDB在您的类路径上,并且您没有手动配置任何数据库连接bean,那么我们将自动配置内存数据库。
您需要通过将@EnableAutoConfiguration或@SpringBootApplication注解添加到您的一个@Configuration类中来选择自动配置。
备注:你应该只添加一个@EnableAutoConfiguration注解。 我们通常建议您将其添加到主@Configuration类中。
(4)、替代自动配置
SpringBoot自动配置是非侵入式的,您可以随时定义自己的配置来替换自动配置。 例如,如果您添加自己的 DataSource bean,则默认的嵌入式数据库支持将会退回。(这是由于在原来的配置类注解了如@ConditianalOnMissingBean;当程序中存在你需要替代的自动配置类时,这个配置类将覆盖SpringBoot的自动配置)
如果您需要了解当前有哪些自动配置,以及为什么,请使用--debug开关启动应用程序。 这将启用debug日志,并将自动配置日志记录到控制台。
(5)、禁用指定的自动配置
如果你发现正在使用一些不需要的自动配置类,可以使用@EnableAutoConfiguration属性来禁用它们。
@ComponentScan // 开启包扫描
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) // 开启自动配置
@Configuration // 申明当前类为配置类
//@Import(value = {MyProperties.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
如果类不在classpath路径上,则可以使用注释的excludeName属性,并指定全限定名(fully qualified name)。 最后,您还可以通过spring.autoconfigure.exclude属性控制要排除的自动配置类列表。
备注:注解和使用属性(property)定义都可以指定要排除的自动配置类。