SpringBootの简单易懂的理解

回顾Spring

Spring是一个集成了IOC、AOP功能的轻量级容器。

作用:

  1. IOC:控制反转。
    这个就和DI(依赖注入)一起记。
    以往每次我们创建一个对象,都要new一个,比如Student s = new Student(); 然后才能使用s这个对象。但是Spring通过DI(依赖注入)帮我们创建好了这个对象,放到了Spring的容器中。这个对象就是一个bean。我们只需加个注解@Autowired Student s; 就可以用s这个对象。
    好处是什么呢?好处就是可以让这个对象和它的构造方法解耦
  2. AOP:面向切面编程
    分离业务(方法)和系统级服务(审计、日志、事务)。应用对象只需专注业务逻辑,无需关注过多的系统级别服务。

回顾SpringMVC

MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,将数据、显式和业务逻辑分离。
Model:数据层,Javabean组件,包含数据和行为(Dao层和Service层)。
View:页面(JSP)。
Controller:封装Servlet。

最典型的MVC就是Javabean + JSP + Servlet 的模式。

在这里插入图片描述
SpringMVC就做了一件事,封装Servlet

那Servlet做了什么?Servlet是在服务器上的一个中间层。主要就做三件事情:

  1. 接受请求:读取客户端/浏览器发送的显式/隐式的请求数据。
  2. 处理请求:可能直接进行计算,也有可能要去访问数据库。
  3. 响应:把处理完的数据返回给客户端/浏览器。

其实就是整个请求和响应的过程。

(补充:显式的请求和响应: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开启自动配置功能,这样自动配置才能生效;

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值