springboot的优势

采用纯java代码,不在需要配置繁杂的xml文件
在配置中也可享受面向对象带来的好处
类型安全对重构可以提供良好的支持
减少复杂配置文件的同时亦能享受到springIoC容器提供的功能

1.Spring Boot 自动配置原理

  1. springboot的启动类中使用了注解**@SpringBootApplication注解**,里面的**@EnableAutoConfiguration注解**是自动配置的核心,注解内部使用@Import(AutoConfigurationImportSelector.class)(class文件用来哪些加载配置类)注解来加载配置类,并不是所有的bean都会被加载,在配置类或bean中使用@Condition来加载满足条件的bean

2.SpringBoot配置-profile

profile是用来完成不同环境下,配置动态切换功能的
profile配置方式
多profile文件方式:提供多个配置文件,每个代表一种环境。
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
profile激活方式
配置文件:spring.profiles.active=dev

3. spring系列常用注解

1.@SpringBootApplication

  1. 它作用在类上,标识该类为SpringBoot项目启动类。并且让SpringBoot自动给程序进行必要的配置,
  2. 等同于@Configuration@EnableAutoConfiguration@ComponentScaa这三个注解

2.@Configuration

  1. 相当于传统Springxml配置文件。
  2. 如果第三方库需要用到xml文件,建议通过@Configuration类作为项目的配置主类,可以使用@ImportResource注解加载xml配置文件。

3.@EnableAutoConfiguration 自动配置。

SpringBoot自动配置(auto-configuration),尝试根据你添加的启动器(starter)自动配置你的SpringBoot应用。
你可以将@EnableAutoConfiguration注解或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。
如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。
4.@ComponentScan

如果某个类加上@ComponentScan注解,则该类会自动发现扫描组件。
也就是说,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。
我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,SpringBoot会扫描启动类所在包下以及子包下的使用了@Component、@Controller、@Service、@Repository等注解的类。
5.@Controller

@Controller注解用于定义控制器类,在SpringBoot中由控制器负责将用户发来的URL请求转发到对应的服务接口(Controller层)。
一般这个注解用在类上,控制器方法需要加上@RequestMapping注解。

6.@ResponseBody

如果控制器方法加上@ResponseBody注解,该方法的返回结果将直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。
在使用@RequestMapping后,返回值通常解析为跳转路径,加上@esponsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。
比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。
7.@RestController

@RestController注解是@Controller和@ResponseBody的合集。
使用在类上,表示该类是控制器,并且类中所有控制器方法的返回值直接填入HTTP响应体中,是RESTful风格的控制器,控制器方法返回JSON数据。
8.@RequestMapping

提供路由信息,负责URL到Controller中的具体方法的映射。

9.@Import

用来导入其他配置类(加了@Configuration注解的类)。

10.@ImportResource

用来加载xml配置文件。

4. Boot、MVC 、 Spring区别

Spring
Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。
当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。
Spring MVC
Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。
SpringBoot
Spring 和 SpringMVC 的问题在于需要配置大量的参数。
Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

5.springboot的核心功能与使用优点?

核心功能:
springboot项目为独立运行的spring项目,java -jar xx.jar即可运行.
内嵌servlet容器(可以选择内嵌: tomcat ,jetty等服务器.).
提供了starter的pom 配置 简化了 maven的配置.
自动配置spring容器中的bean.当不满足实际开发场景,可自定义bean的自动化配置.
准生产的应用监控(基于: ssh , http , telnet 对服务器运行的项目进行监控.).
springboot无需做出xml配置,也不是通过代码生成来实现(通过条件注解.).
使用优点:
快速搭建项目,
与主流框架集成无需配置集成.
内嵌服务容器.
具有应用监控.
开发部署方便,后期与云计算平台集成方便.

6. SpringBoot starter

依赖管理是所有项目中至关重要的一部分。当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多 artifacts 了。
这时候 SpringBoot starter 就派上用处了。每一个 stater 都在扮演着提供我们所需的 Spring 特性的一站式商店角色。其他所需的依赖以一致的方式注入并且被管理。
所有的 starter 都归于 org.springframework.boot 组中,并且它们都以由 spring-boot-starter- 开头取名。这种命名方式使得我们更容易找到 starter 依赖,特别是当我们使用那些支持通过名字查找依赖的 IDE 当中。
比如说其中最常用的是:
spring-boot-starter:核心 starter,包括自动化配置支持,日志以及 YAML
spring-boot-starter-aop:Spring AOP 和 AspectJ 相关的切面编程 starter
spring-boot-starter-data-jpa:使用 Hibernate Spring Data JPA 的 starter
spring-boot-starter-jdbc:使用 HikariCP 连接池 JDBC 的 starter
spring-boot-starter-security:使用 Spring Security 的 starter
spring-boot-starter-test:SpringBoot 测试相关的 starter
spring-boot-starter-web:构建 restful、springMVC 的 web应用程序的 starter

7.SpringBoot的 Actuator

本质上,Actuator 通过启用 production-ready 功能使得 SpringBoot 应用程序变得更有生命力。这些功能允许我们对生产环境中的应用程序进行监视和管理。
集成 SpringBoot Actuator 到项目中非常简单。我们需要做的只是将 spring-boot-starter-actuator starter 引入到 POM.xml 文件当中。
SpringBoot Actuaor 可以使用 HTTP 或者 JMX endpoints来浏览操作信息。大多数应用程序都是用 HTTP,作为 endpoint 的标识以及使用 /actuator 前缀作为 URL路径。
这里有一些常用的内置 endpoints Actuator:
auditevents:查看 audit 事件信息
env:查看 环境变量
health:查看应用程序健康信息
httptrace:展示 HTTP 路径信息
info:展示 arbitrary 应用信息
metrics:展示 metrics 信息
loggers:显示并修改应用程序中日志器的配置
mappings:展示所有 @RequestMapping 路径信息
scheduledtasks:展示应用程序中的定时任务信息
threaddump:执行 Thread Dump

8. Spring Boot 的核心配置文件

  • Spring Boot 中有以下两种配置文件:
    • bootstrap (.yml 或者 .properties)
    • application (.yml 或者 .properties)
  • bootstrap/ application 的区别:
    在 Spring Boot 中有两种上下文,一种是 bootstrap,,另外一种是 application, bootstrap 加载优先于 applicaton。 bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。因此,对比 application 配置文件,bootstrap 配置文件具有以下几个特性:1. boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载. 2. boostrap 里面的属性不能被覆盖

9.Spring Boot 的配置文件格式

.properties 和 .yml,它们的区别主要是书写格式不同。
(1).properties
app.user.name = javastack
(2).yml
app:
user:
name: javastack
另外,.yml 格式不支持 @PropertySource 注解导入配置。

10.开启 Spring Boot 特性方式

1.继承spring-boot-starter-parent项目

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.6.RELEASE</version>
  5. </parent>

2.导入spring-boot-dependencies项目依赖

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-dependencies</artifactId>
  6. <version>1.5.6.RELEASE</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. <dependencies>
  11. </dependencyManagement>

11. Boot 自动配置原理

Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射

13.监听器、过滤器和拦截器

监听器继承HttpSessionListener

过滤器继承Filter

拦截器继承HandlerInterceptor

配置类注解@Configuration实现WebMvcConfigurer

14.拦截器过滤器的区别

拦截器可以访问action上下文、值栈里的对象,而过滤器不能

拦截器只能对action请求起作用,拦截器可以多次被调用,过滤器可以对几乎所有的请求起作用

Filter在Servlet前后作用,Interceptor在方法的前后作用,异常抛出前后,具有更大的弹性。所以优先使用拦截器。