springboot的学习随笔
SpringBoot:自动配置信息,减少配置文件的书写
SpringDate:持久层框架。Mybatis时一种半自动化的ORM框架(sql语句需要自己写),底层hibernate实现
SpringCloud:做架构的,微服务架构
第一天
SpringBoot项目的三种搭建方式:
在线搭建,去spring的官网,只要输入项目名,需要引入的启动器就会自动搭建并且提供下载到本地,然后导入到项目中
SpringBoot CLI搭建;CLI是一个命令行工具,需要下载后配置到系统环境中,在本地编写好程序,然后在控制台用命令行直接就可以运行,跳过了部署到服务器等步骤,快速原型开发
sts开发工具搭建,右键新建Spring Starter Project项目即可
约定优于配置
我们把@SpringBootApplication注解加到一个类上,让这个类变成配置类也是程序的主入口,里面定义mian方法回调本类,让springboot识别到这个注解,开启自动配置的功能
与程序入口类同包或者子包的类都会被扫描到,不用我们额外配置;这就是事先约定的好处。如果不按照约定类在程序入口之上的包内,springboot就不会扫描
Starter 启动器
启动器是主要简化依赖的,以前的maven项目或其他项目中,如果需要其他jar包的依赖就必须自己找jar包导入项目或者在maven的pom文件中定义依赖坐标和版本,让maven帮我们下到仓库。当依赖很多时候,这个过程就会显得繁琐。
怎么简化呢?
在springboot中只需要引入一个starter即可,它可以把项目用到的依赖全部关联进来
- springboot默认的启动器为spring-boot-starter,spring-boot-starter-test;其中核心的启动器为spring-boot-starter,它包含了自动配置,日志,YAML
3.如果项目是专门的一个方向,也可更改相对应得启动器,比如spring-boot-starter-web,spring-boot-starter-redis,spring-boot-starter-aop等
springboot结合maven使用(springboot是一个特殊的项目)
在pom文件得bulid标签中配置spring-boot-maven-plugin插件,让springboot中可以使用maven得功能,运行,打包等
继承spring提供得项目
一般情况下建议使用标签继承spring提供得父项目,这样我们得项目中就可以得到额外的功能:比如java版本,项目编码,插件配置等
org.springframework.boot
spring-boot-starter-parent
1.5.17.RELEASE
2.如果不需要父类项目继承的功能,也可以自己覆盖:比如编码,java版本需要用自己合适的
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
第二天
springboot的核心功能:自动配置
如上图:我们再执行一个测试类,它的执行过程会分为两部分
1.第一部分springboot会扫描入口同包或者子包下的配置类,将对象交给容器,关联类对象
2.第二部分扫描框架自带的类,并把他们关联过来
在我们没有做其他额外配置的情况下:
1.Springboot 测试类为什么能启动 springboot 的入口类?
因为约定由于配置,springboot默认会扫描与测试类同包或者子包去找入口类,入口类上会加上@SpringBootApplication注解,然后执行类中的main方法,方法中会回调当前类,这样就可以识别类上的注解,然后开启自动配置等功能,最后再执行测试类
2.Springboot 入口类为什么能读取到我们的 JavaConfig 类和其他框架的 JavaConfig?
这就是因为前面我们所提到的----约定优于配置,同包或子包下面的配置类可以被自动扫描到并读取。
首先:
什么是javaConfig类?
在我们以前的spring或者springMVC框架中,管理对象的生命周期,管理对象的关联关系有两种方式
1.bean形式,在xml配置文件中配置
2.annotation 注解的形式,在需要的类和对象上加上对应的注解,但最后必须要xml配置文件中,配置标签通知框架容器去识别这些注解
但是现在在springboot框架中,它的要求就是我们不需要写xml配置文件,springboot也能帮我们识别注解,帮我们管理关系将对象放在容器中,前提是遵守一定的约定,就是把需要配置的类写在入口类的同包或者子包下,springboot默认才会扫描.
第三种方式:配置javaConfig配置类,加上对应的注解。
//相当于以前xml配置文件
@Configuration
public class AppConfig {
//方法的返回值就是将来放在容器的bean对象,名字就为方法名
@Bean
public User user() {
return new User();
}
//
@Bean
public Group group() {
return new Group();
}
再者:
其他框架的javaConfig,springboot怎么帮我们自动扫描到的,而且其他框架的资源一般不会与入口类同包,不能自动扫描到。
也就是原先我们在spring框架中,只用配置class路径的bean对象,因为是spring自带的对象,我们想用的时候就声明出来。
但是在springboot中不同写xml配置文件,我们要用的时候,springboot怎么会帮我们自动配置,或者我们怎么告诉springboot我们要用这个类?
解决:
SpringBoot 中的框架自动配置 :
当前我们在 springboot 项目中引入一个框架的时候,例如 springmvc 框架,我们不几
乎不需要做任何配置,就可以使用到 springmvc 中的功能并且成功运行,这就是因为引
入 springmvc 框架后,springboot 就已经自动帮我们把这个框架都默认配置好了。
如何实现的自动配置:
整体思路是这样的,常用框架对应的 JavaConfig 类都已经编写好了,springboot 启动
的时候会一个一个的进行读取,但是读取的时候会先根据条件进行判断,看是否需要真的
读取该配置类去配置对应的框架。所以,关键的一点在于,每个配置类中,都可以添加条
件注解,来判断是否满足某一个条件,从而决定是否读取该配置类。
具体流程如下 :
1. 程序入口类上使用@SpringBootApplication 注解
2. @SpringBootApplication 注解又包含了@EnableAutoConfiguration 注解
3. @EnableAutoConfiguration
注解又导入(@Import)了 EnableAutoConfigurationImportSelector 类
4. EnableAutoConfigurationImportSelector
类的父类 AutoConfigurationImportSelector 中,
定义了一个方法 getCandidateConfigurations
5. getCandidateConfigurations 方法可以扫描 spring.factories 文件中的配置
6. spring.factories 文件在
spring-boot-autoconfigure-1.5.17.RELEASE.jar 的 META-INF 中
7. spring.factories 文件中声明了很多 java 配置类,但是每个配置类都是需要满足一
定的条件才会执行(例如:@ConditionalOnClass、@ConditionalOnProperty 等)
最后我们使用框架提供的类,只需要在springboot的application.properties文件中开启使用即可
my.service.hello.enabled=true
spring.application.admin.enabled=true
第三天 springboot与mybatis,jdbc结合
1.与jdbc结合
springboot中使用JdbcTemplate类,来对jdbc编程提供支持。
首先,在以前spring中要使用JdbcTemplate类,必须以bean的形式配置到容器中,而且使用的前提也必须给它注入dataSource数据源。
在springboot中,因为在启动器中就引入了很多spring的jar包,所以在运行入口类时,springboot就已经把JdbcTemplate类实例化好了
此时我们需要的做的就是把数据源在application.properties配置文件中配好,让框架自动帮我们注入
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
2.与mybatis结合
主要是通过注解和配置文件
核心jar包
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
第一步:在application.properties文件中,配置数据源,sql映射文件等
#配置数据源到容器,spring会帮我们自动放在需要数据源的类中
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.briup.bean
如果需要,可以执行指定的sql文件进行建表
spring.datasource.schema=sql/test.sql
第二步:编写sql映射文件,在命名空间配置映射接口的全包名
<?xml version="1.0" encoding="UTF-8" ?><sql id="Base_Column_List" >
id, name, age, gender
</sql>
<select id="getAll" resultMap="BaseResultMap" >
SELECT
<include refid="Base_Column_List" />
FROM t_user
</select>
<select id="getOne" parameterType="long" resultMap="BaseResultMap" >
SELECT
<include refid="Base_Column_List" />
FROM t_user
WHERE id = #{id}
</select>
第三步:@MapperScan({“com.briup.mapper”})注解和@Mapper注解
首先这两个注解都是用来扫描映射接口的,默认是以接口类名首字母小写,将来动态生成实现类放在容器中,通过@Autowired注解自动注入,就可以使用
[email protected]({“com.briup.mapper”})是在springboot的启动类上使用,表示扫描某个包下,或者几个包下的映射接口,自动为他们生成实现类。
[email protected]在某个映射接口上使用,表示将来为当前接口动态生成实现类
上一篇: SpringBoot 配置文件详解
下一篇: 初学Springboot随笔笔记