Guns 第五节 Spring BOOT精要

这里介绍一下,spring boot不是应用服务器,我们为什么可以用main方法启动一个服务器呢?

是因为Tomcat内置了一个tomcat服务器,本身没有提供服务器的功能,

第二点,springboot不是spring mvc的替代,springboot是一个简化spring开发的工具,springboot和springmvc没有直接的关联,唯一的关联可能就是springboot之后,spring mvc的配置就会发生一些改变

第三点,springboot没有代码生成,springboot简化了配置,还有简化了依赖,大家可能会想到有一个代码生成功能帮我们生成了配置,其实不是这样的,它没有代码生成功能。springboot内置了写好了的配置代码,并且设置了一些开关,下面我们会接触到有一些Conditional的开关,打开已经写好的一些配置。

下面介绍一下为什么要学习springboot,我们举一个例子,通过对比Guns 1.0和Guns 2.5这两个版本,

Guns 1.0的配置都在config包下面,可以看到它的配置会比较多一点

Guns 2.5用了springboot配置会相对少一点,我们从内容上来看

创建一个简单的springboot程序之后,我们发现这个程序是直接可以写控制器的,直接可用的程序,我们省略了之前这些maven配置,创建maven工程之后,我们还需要pom,我们发现我们在做这个demo的时候,我们是没有配置pom的,我们只需要告诉springboot我们只需要一个web功能,它就给我们引用了很多的传递依赖,

在springboot框架下,我们直接写的业务,然后再main方法下直接启动,是不是非常的简便

配置是如何省略的呢,从springboot其实是默认写好很多很多的配置,然后springboot非常的智能,他用来判断是不是我们当前的环境,当前的程序里面是不是需要加载相关的bean,我们就以jdbc,就以DataSourceTransactionManager为例,我们找一下它是在哪里自动配置的

我们详细分析一下这个类的组成,代表它是一个配置类,然后我们重点讲解一下,还有一系列的ConditionalOn的条件化注解,,从字面上我们可以理解,如果在当前class下有这两个类的话,springboot就会激活下面的这些代码可以放在类上,也可以放在方法上,大家可以看到这些注解可以放在方法或者类上,然后看一下每一个的含义;

就是当前环境如果配置了某个特定的bean,就激活注解下边的类或者方法,这句话什么意思呢,我们举一个例子,比如说我们当前环境下配置了mybatis-plus的分页插件这个bean,如果我在ConditionalOnBean这样写,这就是说如果当前环境加载了Pagin

ationInterceptor.class,也就是说这个bean激活这段代码

当前环境下配置了哪些bean就会激活上边红框里面的代码。

当前环境没有配置特定的bean,这个bean其实就是spring的bean,如果没有配置特定的bean就会让这个下面特定的代码生效。

classpath中有指定的类,就会让这个注解下面的代码生效,我们pom里面引用了这些类,是不是classpath下就有相关的指定类了

,如果classpath中没有制定的类,那么这个注解下面的类就会生效,这其实就是一些开关。

,这个在我们的guns管理系统中用的非常的多,我们随便找一个例子给大家介绍一下

如果我们的项目中有相关的property,那么这个property指的是application.yml里面相关的配置,如果yml里面有相关的配置,我们就会激活这个bean,就会配置这个bean,有哪些配置呢》是通过prefix,name,havingValue这样的一些东西去控制的,如果我们的项目中yml有guns:muti-datasource-open这样的一些配置,并且有false这个值,就会激活这段代码,我们看一下

如果我们把false改成true的话,就会激活这段代码

,resource里面的都是资源,我们可以通过判断项目中有哪些资源,从而决定打开或者不打开这些bean这个用来判断这是不是是一个web程序,

自动配置的原理就是利用一系列的Conditional注解来激活spring这些已经写好的配置,要打开哪些,不打开哪些,都是用Conditional来判断的。

起步依赖就是针对pom相关的,当我们需要什么功能的时候,我们直用springboot,我们需要一个什么样的功能,从而用一个dependency代替很多个dependency,比如说我们需要在项目里面加上缓存,如果我们不用springboot的话,我们需要在pom里面加上cache相关的包,但是我们用springboot的话,我们只需要一个依赖,,我们所有的包 都这这里面,我们不需要关注版本。大家可以看到我们的项目集成了redis,aop,web,cache,jdbc,我们只需要告诉pom,这个项目需要哪些功能就可以了,然后springboot帮我们自动找到这些功能需要的依赖。

,springboot帮我们做了很多问题,比如说web里面,springboot默认地帮我们用了jackson解析json,但是我们在日常生产中用到了fastjson,怎么办呢?我们就需要排除掉json,我们就需要找到它依赖的json,大家可以看到是这个东西,我们排除掉它,然后项目里面我们再引用fastjson,这样就把这个里面带的fastjson剔除掉了,所以说当我们项目里面这样的实际生产需求的话通过排除依赖(它里面依赖的这些包自动剔除掉)

在项目生产上假如说,springboot是用的1.01.0,我们需要用2.0的版本,怎么办呢,

我们需要把这个里面自带的aspectjweaver剔除掉,然后在项目的其他位置引用一下aspectjweaver,然后把version写成2.0就可以了

不介绍了,需要的话可以去看文档

猜你喜欢

转载自blog.csdn.net/zerolaw/article/details/81161706