1.SpringBoot
为什么要用SpringBoot
(1)简化部署
在使用Spring时,项目部署时需要我们在服务器上部署Tomcat,然后把项目打成war包扔到Tomcat里,
在使用SpringBoot后,我们不需要在服务器上去部署Tomcat,因为SpringBoot内嵌了Tomcat,我们只
需要将项目打成jar包就能独立运行,所有的依赖包都在一个jar包内。
(2)简化配置
Spring 虽然是Java EE轻量级框架,但是配置却是极其繁琐的,有各种xml、Annotation配置,一旦出错了是很难找到出错原因的。SpringBoot采用了Java Config 的方式,对spring进行配置。例如我们新建一个类,在这个类中使用@Configuration和@Bean两个注解,@Configuration注解代表该类是个配置类,
@Bean注解表示该方法返回一个Bean对象
(3)自动配置
Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starterweb启动器就能拥有web的功能,无需其他配置。
(4)简化监控
我们可以引入 spring-boot-start-actuator 依赖,直接使用REST方式来获取进程的运行期性能参数,从而
达到监控的目的,比较方便。但是 SpringBoot 只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要SpringCloud来配合一 起使用。
(5)简化依赖,比如我们要创建一个web项目,在使用spring的时候,需要在pom文件中添加多个依赖;
而SpringBoot则会帮助开发者快速启动一个web容器,在SpringBoot中,我们只需要在pom文件中添加一个
spring-boot-starter-web依赖即可。
SpringBoot的核心注解是什么,它由哪些注解组成?
核心注解是@SpringBootApplication,它也是启动类上的注解,该注解主要包含了以下3个注解:
(1)@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能
(2)@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭
数据源自动配置的功能:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
(3)@ComponentScan:Spring组件扫描
SpringBoot自动装配原理
(1)自动装配, 简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 容器里面,不需要开发人员再去写 Bean 的相关配置。在 Spring Boot 应用里面, 只需要在启动类上加上@SpringBootApplication 注解就可以实现自动装配。
(2)@SpringBootApplication 是 一 个 复 合 注 解 , 真 正 实 现 自 动 装 配 的 是@EnableAutoConfiguration注解。
①引入 Starter 启动依赖组件的时候, 这个组件里面必须要包含一个@Configuration 注解配置类,而在这个配置类里面通过@Bean 注解声明需要装配到 IOC 容器的 Bean 对象。
②这个配置类是放在第三方的 jar 包里面, 然后通过 SpringBoot 中的约定优于配置思想, 把这个配置类的全路径放在 classpath:/META-INF/spring.factories 文件中。这样SpringBoot 就可以知道第三方 jar 包里面的配置类的位置, 这个步骤主要是用到了 Spring 里面的 SpringFactoriesLoader 来完成。
③SpringBoot 拿到第三方 jar 包里面声明的配置类以后, 再通过 Spring 提供的ImportSelector 接口, 实现对这些配置类
的动态加载。
(3)在我看来, SpringBoot 是约定优于配置这一理念下的产物, 所以在很多的地方,都会看到这类的思想。 它的出现, 让开发人员更加聚焦在了业务代码的编写上,而不需要去关心和业务无关的配置。
(4)其实, 自动装配的思想, 在 SpringFramework3.x 版本里面的@Enable 注解, 就有了实现的雏形。 @Enable 注解是模块驱动的意思, 我们只需要增加某个@Enable 注解, 就自动打开某个功能, 而不需要针对这个功能去做 Bean 的配置, @Enable 注解的底层也是帮我们去自动完成这个模块相关 Bean 的注入。