开源的,轻量级的(Spring的组件代码),非侵入时的一站式框架,简化企业级应用开发。
控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦。
面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。可以把一些独立的功能抽取到一个切面中去,在不改变原来代码的基础上对我们的代码进行功能上的增强。
Spring对于主流的应用框架提供了很好的支持,例如mybatis
Spring提供自己的MVC实现。
配置是重量级的(配置很麻烦,“废话”很多,例如配置开启事务(事务在现在的项目中是必要的)、开启注解等 。虽然Spring引入了注解功能,但是仍然需要编写大量的模板化配置文件。
项目的依赖管理比较麻烦(jar包相关吗,需要的jar包如:数据库,gson,日志,spring相关,阿里数据源,mybatis,文件上传组件),需要分析要导入大量库的坐标,而且还需要分析导入与之有关依赖,一旦选择错依赖版本,随之人来的不兼容问题就会严重阻碍项目的开发进度。
Spring Boot对上述Spring的缺点进行改善和优化,基于约定由于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
Spring Boot是由Pivotal团队提供的在Spring框架基础上开发的框架,其设计目的是用来简化应用的初始搭建以及开发过程。
Spring Boot本身幷不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。
Spring Boot以**约定大于配置**的核心思想,从而使开发人员不再需要定义样板化的配置。它集成了大量常用的第三方库配置(如Redis(非关系型数据库,做缓存用 ),MongoDB,Jpa RabbitMQ(消息队列),Quartz(定时组件)等等), Spring Boot应用中这些第三方库几乎可以零配置的开箱即用,通过这种方式, Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者。
spring官网:spring.io
Spring Boot你只需要“run"就可以非常轻易的构建独立的、生产级别(公司里面商业级别的)的Spring应用。大部分Spring Boot应用只需要很少的配置。(必须要配的:数据库连接、扫描Mapper.xml所在的包)
创建独立的spring应用程序
直接内嵌tomcat、jetty和undetow
提供了固定化的“starter”配置,以简化构建配置
尽可能的自动配置,如:安全指标、运行状况监测和外部化配置等
绝对不会生成代码,并且不需要XML配置
起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
Spring Boot的自动配置士一个运行时(更准确的说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
搭建网址:http://start.Spring.io/ 选择配置选项,在线生成并下载
第四步,选择依赖组件,如Web--->springWeb,SQL --->JDBC API,Mybatis Framework,MySQL Driver等。
补充:在线生成启动 logo网址:https://www.bootschool.net/ascii ,下载存放在 resources 目录下即可。
Spring Boot使用一个全局的配置文件(配置名是固定的)
application.properties 属性文件格式内容为键值对
server.port=8080
application.yml
yml是YAML(YAML Ain’ t Markup Language)语言的文件,以数据为中心。
yml配置示例
server:
port:8080
yaml 基本语法:
语法结构:key:空格 value
以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
spring实现自动装配的核心仍然是使用注解标签。
@SpringBootApplication
是springboot的核心注解,其中包含@SpringBootConfiguration
,@EnableAutoConfiguration
,@ComponmentScan
。
@ComponmentScan
:对启动类所在类的包中的类扫描,它默认扫描的是与该类同级的类或者同级包下的所有类。
@SpringBootConfiguration
:通过源码得知它是一个@Configuration
,相当于之前的配置文件功能。扫描带有@Configuration注解标签的类(等同于之前的xml文件)
@EnableAutoConfiguration
:自动装配的注解标签 最重要的,根据我们的配置,去加载一些第三方组件.是这里最重要的注解,它实现了对Spring Boot应用自动装配的功能。它的配置数据在 META-INF/spring.factories 中,我们打开 spring-boot-autoconfigure jar 中 的该文件,发现对应着许多个 XXXAutoConfiguration 配置类。
@Import({AutoConfigurationImportSelector.class}) 加载选择器在 spring-boot-autoconfigure-2.4.7.jar /META-INF /spring.factories 文件中,结合pom.xml文件中所添加的依赖进行自动装配
@Configuration
:加入@Configuration
注解,表明这就是一个配置类。有一个 myBean()的方法 ,并用@Bean
进行注释,返回一个 MyBean()的实例,表明这个方法是需要被 Spring 进行管理的 bean。@Bean
如果不指定名称的话,默认使用 myBean 名称,也就是小写的名称。
@Bean
:相当于 XML 中的,放在方法的上面,而不是类,意思是产生一 个 bean,并交给 spring 管理。
数据源配置:在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一个几种不同的数据库配置方式。
首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
在application.yml中配置数据源信息
#spring配置
spring:
#数据库连接配置
datasource:
url: jdbc:mysql://127.0.0.1:3306/ssm_db?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
使用JdbcTemplate操作数据库
Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用。
导入阿里数据源jar
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
在 yml 文件中注册阿里数据库连接池
#spring配置
spring:
#数据库连接配置
datasource:
url: jdbc:mysql://127.0.0.1:3306/ssm_db?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
filters: stat
initialSize: 5 #初始化时建立物理连接的个数
maxActive: 20 #最大连接池数量
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
在 application.yml 中配置数据源信息
mybatis:
type-aliases-package: com.ff.back.bean
mapper-locations: classpath:mapper/*Mapper.xml
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
推荐一款插件:MyBatisX。
最后,在SpringBoot
中的启动类上配置@MapperScan(“com.ff.back.mapper”),去扫描放接口的包,然后在接口层配置@Repository。
logging:
level:
com.ff.back.mapper: trace #持久层的日志打印 trace 日志级别
file:
name: D:\\logs\\log.log
启动类:
@SpringBootApplication
@MapperScan("com.ff.back.mapper")
bean层/pojo层:
@Component
@TableName(value = "user")
config层:
@Configuration
controller层:
@RestController
@RequestMapping(path = "/api/login")
dao层/mapper层(持久层):
@Repository
service层:
@Transactional
@Service