回顾Spring
Spring是一个集成了IOC、AOP功能的轻量级容器。
作用:
- IOC:控制反转。
这个就和DI(依赖注入)一起记。
以往每次我们创建一个对象,都要new一个,比如Student s = new Student(); 然后才能使用s这个对象。但是Spring通过DI(依赖注入)帮我们创建好了这个对象,放到了Spring的容器中。这个对象就是一个bean。我们只需加个注解@Autowired Student s; 就可以用s这个对象。
好处是什么呢?好处就是可以让这个对象和它的构造方法解耦。 - AOP:面向切面编程
分离业务(方法)和系统级服务(审计、日志、事务)。应用对象只需专注业务逻辑,无需关注过多的系统级别服务。
回顾SpringMVC
MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,将数据、显式和业务逻辑分离。
Model:数据层,Javabean组件,包含数据和行为(Dao层和Service层)。
View:页面(JSP)。
Controller:封装Servlet。
最典型的MVC就是Javabean + JSP + Servlet 的模式。
SpringMVC就做了一件事,封装Servlet!
那Servlet做了什么?Servlet是在服务器上的一个中间层。主要就做三件事情:
- 接受请求:读取客户端/浏览器发送的显式/隐式的请求数据。
- 处理请求:可能直接进行计算,也有可能要去访问数据库。
- 响应:把处理完的数据返回给客户端/浏览器。
其实就是整个请求和响应的过程。
(补充:显式的请求和响应:HTML表单、二进制文件、Excel等,
隐式的请求和响应:cookies、文档类型和格式、缓存参数)
什么是SpringBoot?
所以你看,我们最早的时候开发一个web应用,使用Servlet结合Tomcat,后来是SpringMVC,现在呢,就要用SpringBoot了。还记得写SpringMVC的时候要写很复杂的那个配置文件吗?
SpringBoot就完全不用写这些配置。
Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置地开箱即用。
就很爽。
用SpringBoot写一个简单的web应用,熟练的话只要五分钟。
- 项目创建
创建一个新项目,选择spring initalizr,选择SpringWeb。
创建完毕后,可以发现自动生成了以下文件。
1、程序的主启动类DemoApplication
2、一个 application.properties 配置文件
3、一个 测试类
4、一个 pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- web场景启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springboot单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- 打包插件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Controller必须和启动类在同一目录下
输入默认的内置Tomcat端口号+配置的RequestMapping路径
这就是一个最简单的SpringBoot程序。
那我们来看一下它的运行原理。Maven项目,我们一般从pom.xml文件探究起。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
该SpringBoot项目继承了一个父类,Spring-boot-starter-parent,点进这个父类发现它还继承了一个父类。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.1</version>
</parent>
这里才是真正管理SpringBoot应用里面所有依赖版本的地方,SpringBoot的版本控制中心。
以后我们导入依赖默认不需要写版本;但是如果着个依赖不在SpringBoot版本中心里面,就要配置版本。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-xxx:就是spring-boot的场景启动器
spring-boot-starter-web:web环境的场景启动器,帮我们导入了web模块正常运行所依赖的组件。
SpringBoot将所有的功能场景都抽取出来,做成一个个的starter (启动器),只需要在项目中引入这些starter即可,所有相关的依赖都会导入进来 , 我们要用什么功能就导入什么样的场景启动器即可 ;我们未来也可以自己自定义 starter;
比如我们点进spring-boot-starter-web,会发现它导入了tomcat、json等依赖。
启动类:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
//以为是启动了一个方法,没想到启动了一个服务
SpringApplication.run( DemoApplication.class, args );
}
}
@SpringBootApplication 作用:标注在某个类上说明这个类是SpringBoot的主配置类 , SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
点进这个@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 {
@ComponentScan:对应XML配置中的元素。
作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中。
@SpringBootConfiguration
作用:SpringBoot的配置类 ,标注在某个类上 , 表示这是一个SpringBoot的配置类;
这个类再点进去:
@Configuration
public @interface SpringBootConfiguration {
...
@Configuration,说明这是一个配置类 ,配置类就是对应Spring的xml 配置文件;
再点进去:
@Component
public @interface Configuration {
@Component 这就说明,启动类本身也是Spring中的一个组件而已,负责启动应用。
我们继续回到 @SpringBootApplication 注解中,
@EnableAutoConfiguration :开启自动配置功能
以前我们需要自己配置的东西,而现在SpringBoot可以自动帮我们配置 ;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效;
未完待续