SpringBoot开启自动配置理解
在了解spring boot如何开启自动配置时,应先了解什么是spring boot?
1.spring boot
- spring boot是一个简化了spring中多框架中所需大量繁琐的配置文件,服务于框架,且服务范围是简化配置文件的框架
- spring boot特点:配置文件更简单,应用部署更简单(spring boot内置服务器,并装备启动类代码),可快速开启一个web容器进行开发
- spring boot核心功能:
- 1.可独立运行spring项目,以jar包形式独立运行
- 2.内嵌Servlet容器:spring boot可选择内嵌tomcat,jetty或undertow,无序以war包形式部署项目
- 3.简化maven配置:spring提供推荐基础pom文件来简化maven配置
- 4.自动配置spring:spring boot会根据项目依赖来自动配置spring框架,极大减少了项目需要使用的配置
- 5.提供生产就绪性功能:提供可以直接在生产环境中使用的功能,如性能指标,应用信息和应用健康检查
- 6.无代码生成和xml自动配置:spring boot不生成代码,不需要任何xml配置即可实现spring所有配置
2.spring boot开启自动配置
由spring boot原理可知,运行项目需要的tomcat等都被spring boot集成,且简化了maven配置,并不需要xml文件进行配置。而spring项目中,xml文件 用来进行配置是必不可少的,因此,spring boot虽然看不到xml文件,实际上是内部底层进行了处理,原理上仍然是利用了xml文件的作用。
下面就来看看spring boot是如何实现自动配置的吧~
2.1@SpringBootApplication
注解
- 首先看看具体应用及源码:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
由以上代码可知,App作为一个项目的启动(入口)类,此方法其实是spring boot启动的一种常用方式,即直接使用main方法运行。而,main方法中使用SpringApplication.run()来启动整个应用。需要注意的是:这个启动类使用@SpringBootApplication
注解声明,而此注解是SpringBoot的核心注解。
@SpringBootApplication
作用:标注这是一个spring boot应用,而被标注的类则是项目的主程序@SpringBootApplication
实现源码:
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {
@Filter(
type = FilterType.CUSTOM,
classes = {
TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {
AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@AliasFor(
annotation = EnableAutoConfiguration.class
)
Class<?>[] exclude() default {
};
@AliasFor