多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 1. 基础 ### 1.1 什么是SpringBoot ![](https://box.kancloud.cn/ae88d8079d16a2d36a06eaf32bc36868_979x276.png) ### 1.2 springboot优缺点 ![](https://box.kancloud.cn/b3e8581ed61eb10a8b88bd976b53b336_929x514.png) ## 2. 第一个SpringBoot应用 ### 2.1 创建maven项目 ### 2.2 设置spring boot的parent ~~~ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> ~~~ 说明:Spring boot的项目必须要将parent设置为spring boot的parent,该parent包含了大量默认的配置,大大简化了我们的开发。(web.xml,spring.xml…) ### 2.3 导入spring boot的web支持 ~~~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ~~~ ### 2.4 添加Spring boot的插件 ~~~ <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> ~~~ ### 2.5 编写第一个Spring Boot的应用 ~~~ @Controller @SpringBootApplication @Configuration public class HelloApplication { @RequestMapping("hello") @ResponseBody public String hello(){ return "hello world!"; } public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } } ~~~ 代码说明: > 1. @SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置。;SpringApplication.run所有跑的class必须用这个注解声明 > 2. @Configuration:这是一个配置Spring的配置类; > 3. @Controller:标明这是一个SpringMVC的Controller控制器; > 4. main方法:在main方法中启动一个应用,即:这个应用的入口; 效果 :这样一个简单的web项目就OK了 ![](https://box.kancloud.cn/fa4517d5b7f42aaa2a2ab5c6e7950032_935x187.png) ## 3. Spring Boot的核心 ### 3.1 入口类和@SpringBootApplication > 1. Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。 > 2. @SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解: ![](https://box.kancloud.cn/2dc2e99fe5b4b361fbccdc77a4ffb916_1177x260.png) >* 该注解主要组合了以下注解: > 1. @SpringBootConfiguration: > 这是Spring Boot项目的配置注解,这也是一个组合注解,在Spring Boot项目中推荐使用@ SpringBootConfiguration替代@Configuration ![](https://box.kancloud.cn/136d0b21cf5d40aad3a755cbd9346e59_573x194.png) > 2. @EnableAutoConfiguration: > 启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项: > a) 如:我们添加了spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC ![](https://box.kancloud.cn/1487aecc05434aa01c7039348f58b00c_577x243.png) > 3. @ComponentScan:默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。 ### 3.3 关闭自动配置 通过上述,我们得知,Spring Boot会根据项目中的jar包依赖,自动做出配置,Spring Boot支持的自动配置如下(非常多): ![](https://box.kancloud.cn/14a2af67afb351b0f8f911b269f0c253_546x631.png) 如果我们不需要Spring Boot自动配置,想关闭某一项的自动配置,该如何设置呢? 比如:我们不想自动配置Redis,想手动配置。 ![](https://box.kancloud.cn/c0d6cb35124f3cbc44ece632f5338253_775x119.png) 当然了,其他的配置就类似了。 ## 3.4 全局配置 Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。 ### 3.4.1 修改tomcat的端口为5324 ![](https://box.kancloud.cn/ec7ab4bb6483ed6d9dd13122fec9222f_622x165.png) 重新启动应用,查看效果: ![](https://box.kancloud.cn/d262d1742ffc4cfa75c85ef0890ce98d_944x160.png) ### 3.4.2 修改进入DispatcherServlet的规则为:*.html ![](https://box.kancloud.cn/6eebb490cc5c75af82fc4e0e74b4b28d_465x94.png) 测试: ## 3.5 Starter pom ![](https://box.kancloud.cn/3919e98f31beeb25d8ace68dd3656d91_977x134.png) ![](https://box.kancloud.cn/4a4dd6527b720b9d89f99433ae354769_944x348.png) ![](https://box.kancloud.cn/bfd5a766329ed6113ed08c0e02c0af41_912x654.png) ![](https://box.kancloud.cn/f328efcf7cdd8777ff1c97ea7462eeae_928x501.png) ## 3.6 引入xml 配置文件 ![](https://box.kancloud.cn/027296eb58ab269defb17d2e877aaf07_948x186.png) ## 3.7 Spring Boot的自动配置的原理 1. Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器。 2. Maven下载源码 3. 通过 dependency:sources 该命令可以下载该项目中所有的依赖的包的源码。 ### 3.7.1 源码分析 org.springframework.boot.SpringApplication: ![](https://box.kancloud.cn/f9cfccd779257b40c5f410e5be3f57ff_1208x283.png) ### 3.7.2 Spring.factories文件 ~~~ # Initializers org.springframework.context.ApplicationContextInitializer=\ org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\ org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer # Application Listeners org.springframework.context.ApplicationListener=\ org.springframework.boot.autoconfigure.BackgroundPreinitializer # Auto Configuration Import Listeners org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\ org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener # Auto Configuration Import Filters org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\ org.springframework.boot.autoconfigure.condition.OnClassCondition # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\ org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\ org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\ org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\ org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\ org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\ org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\ org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\ 还有很多 ~~~ ### 3.8 Redis的自动配置 从上述的配置中可以看出,org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration是Redis的自动配置。内容: #### 3.8.1 条件注解 ![](https://box.kancloud.cn/e7bbd5cdc122efeeea38bae965f9224e_1214x580.png) ![](https://box.kancloud.cn/d281c38d22d56480eb21a19e08107e84_674x164.png) ![](https://box.kancloud.cn/b3d222d636d680a745170d5d6bd8e37f_946x504.png) @ConditionOnMissingBean:当我们没有自己去配置redis配置对象时,springboot才会自动帮我们配置