spring boot 学习笔记

Spring boot 使用了大概2年多了,虽然一直使用,但是针对spring真正的优点都没有掌握,所以现在系统的看看,spring boot 除了给开发者带来的配置的方便,还有什么特性。

一、spring boot的官方文档

spring boot 中的相关配置文件可以在这里查询 。

二、spring boot 中的依赖关系

配置一个spring boot 项目,需要在pom中引入spring boot 的父项目,其实它的目的跟平时使用的父项目是一样的,就是统一jar包版本的管理。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>版本/version>
    </parent>

这样就能统一版本管理了。

如果在我们期望修改相关jar包的版本,可以进入到版本管理的文件查看集体命名规则,在自己项目中的pom改写即可。

如下:

<properties>
	<mysql.version>5.1.43</mysql.version>
</properties>
  • 见到很多 spring-boot-starter-* ,就是官方提供的启动器,例如我们引入了web,那么就会引入web相关的jar包
  • *-spring-boot-starter,是第三方为我们提供的简化开发的场景启动器
  • 官方提供的启动器,可以在官方文档中查询到

 三、spring boot 的自动装配

例如引入web启动器之后,就会引入相关的 tomcat的jar包、dispatcherServlet、编码解析器、文件解析器等,所以spring boot 帮助使用者,整合了大部分的web开发场景。

同时spring boot 为使用者提供了 默认包的扫描,是主程序所在包及其下面全部的子包,都会被扫描。同时使用者也可以修改默认的扫描包。@SpringBootApplication(scanBasePackages = "*")或者@ComponentScan。

在sping boot中,有许多的复合注解 SpringBootApplication,就是如下三个注解的复合注解:

 关于默认值的配置,spring boot 文件中都有相关的配置,使用者可以根据自己的需要对默认值进行覆盖,其实就是把所有的默认值最后都映射到某个bean上,例如日志配置都是映射到:

同时默认配置也是按需加载的,引入那些场景,才会开启自动配置,所有的配置都在spring-boot-autoconfigure中。

四、@Configuration

 告诉spring boot 是一个配置类,等同于配置文件。

用户@Bean注解,给容器中添加组件,方法名作为组件的ID(也可以自定义),返回类型就是组件类型,同时放回的bean对象就保存在容器中。

注册的组件,就是单实例的。

属性 proxyBeanMethods = true的时候,获取到的配置类就是被代理的对象,为了保证组件单实例,外部无论对组件注册方法,调用多少次,都是从容器中拿出来的,也就是Full模式,也是解决了组件依赖的问题,防止依赖的组件和容器中的不一样。Lite模式整好与Full模式相反。

当配置类中,如果配置类中没有需要被其他组件依赖的,使用者就可以是哦用Lite模式启动,有点是启动\调用速度快(因为少了一层代理,框架也不用进行检查)。

@Import 调用无参构造方法,给容器中注册组件,默认名字就是全类名。

五、@Conditional

条件装配

例如组件A依赖于组件B,所以在组件A注册的时候,需要判断是否存在组件B,所以可以使用@ConditionalOnBean去判断是否存在组件B。

六、@ImportResource

某些使用bean.xml配置的组件,可以使用这个注解,导入相关组件。

七、配置绑定

可以让配置文件的某几个配置信息,按照一定格式,封装到bean中。

第一种方式:@Component + @ConfigurationProperties(prefix = "mycar")

配置文件中:

mycar.brand = BYD
mycar.price = 100000

bean中:

package com.test.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {

    private String brand;

    private Integer price;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }
}

第二种方式:@EnableConfigurationProperties + @ConfigurationProperties(prefix = "mycar")

需要在配置类中,@EnableConfigurationProperties注解,如下:

有了配置绑定,当使用者在配置文件中配置了自动以属性的时候,就不用在读取配置见,可以直接映射到bean中。十分的方便。

八、自动配置原理入门

1、引导加载自动配置类

  • @SpringBootConfiguration:@Configuration,设置spring boot 启动类就是一个配置类
  • @ComponentScan:扫描包
    • @EnableAutoConfiguration
      • ① @AutoConfigurationPackage:利用Registrar类给容器导入组件主要作用,就是把扫描的包(默认\自定义)的全部组件祖册到容器中。
      • @Import({AutoConfigurationImportSelector.class}):利用getAutoConfigurationEntry给容器导入组件。最后导入的就是

              写死的配置文件,一共127自动配置类。启动就要给容器加载的配置类。但是容器会         根据实际情况进行自动的加载配置。

2、按需开启配置自动配置项

会根据按需加载的注解(@Conditional),进行按需装配。

3、定制化修改自动配置

spring boot自动会配置相关组件,但是如果用户自己配置了,则用户的优先。

总结:

  • spring boot 先加载自动配置类
  • 每个自动配置类按照条件生效
  • 生效的配置类就会给容器中装配很多的组件
  • 只要容器中存在这些组件,则容器有拥有这些功能了
  • 以用户自定义配置优先
    • 用户自己@Bean 替换底层的组件
    • 自动类都会属性绑定,使用者就可以在配置文件中自定义需要的属性值

4、最佳实践

  • 引入场景依赖
  • 查看自动配置有哪些
    • 可以查看源码或者官方文档
    • debug=true,控制台就可以看到哪些生效、不生效
  • 分析是否修改配置项
    • 参照文档,修改配置项
    • 分析相关配置类
    • @Bean 自定义组件,替换默认的组件

5、开发小技巧

  • Lombok
  • Spring initailizr:帮助使用者快速的创建spring boot的项目
  • dev-tool:就是重启一下项目。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值