Spring Boot基本配置之入口类和@SpringBootApplication
在SpringBoot快速搭建中可以看到开发者的工作很少就是创建了一个Controller类,其他Spring Boot框架自动处理好了。那么对于Spring Boot执行的核心原理自动配置怎么理解呢?这就涉及其入口类和@SpringBootApplication。
下面是上篇关于数据库属性注入并放置容器中的案例:
这个类只有一个@SpringBootApplication注解的名为*Application的入口类,入口类里有一个main方法。SpringApplication类执行静态run方法以当前类作为配置类生成容器启动Spring Boot应用项目。
之后的操作与Spring就没什么区别了。那如果直接使用Spring执行类似操作,那么在主执行逻辑(类似Main函数)中的逻辑有哪些呢?首先需导入spring相关jar包,其次用常规属性注入的方式配置数据源并至于容器中,最后获取容器中数据源对象。
具体@SpringBootApplication做了啥呢?其主要组合了@EnableAutoConfiguration、@ComponentScan、@SpringBootConfiguration。如果不适用这个注解,则需要再入口类上直接使用其组合的三个注解。
通过上面流程的比较可知,Spring Boot与Spring在此应用中的最大差异在于导入Spring jar包时,用户使用Spring Boot时不知道自己使用Spring相关的内容——由@EnableAutoConfiguration让Spring Boot根据类路径中的jar包依赖为当前项目信息自动配置(参考Spring Boot自动配置原理)。如果需要关闭特定的配置怎么处理呢?
通过@SpringBootApplication的源码可以知道,应该使用期注解的exclude参数,例如下图中排出数据源的自动配置:
既然是自动配置,那么Spring Boot具体自动配置了哪些jar呢?怎么查看呢?通过以下两种方式可以查看当前项目中已启用和未启用的自动配置报告(根据具体情况选择使用):
1、运行jar时增加 --debug参数:java -jar xx.jar --debug
2、在application.properties中设置属性:debug=true
本文验证采用第二用方式运行main函数,控制台可见哪些配置启动与为启动配置:
启动了的:
未启动的: