依赖管理

父项目实现依赖管理
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0-M3</version>
<relativePath/>
</parent>
父项目的父项目做依赖管理: 声明了开发中常用的几乎所有的版本依赖,因此在使用的时候,我们不需要写版本号
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.0.0-M3</version>_</parent>
我们可以修改默认的版本号(在pom.xml文件中进行修改,Maven的就近优先原则)

  1. 1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
  2. 2、在当前项目里面重写配置
  3. <properties>
  4. <mysql.version>5.1.43</mysql.version>
  5. </properties>

场景启动器:
当我们需要某个场景的时候,比如我们需要web开发,那么在springboot中我们只需要引入相应的场景启动器,它会帮我们将这个场景下的所有依赖都引入进来,减少了许多繁杂的配置

  1. 1、常见的spring-boot-starter-* : *就某种场景
  2. 2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
  3. 3、SpringBoot所有支持的场景
  4. https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
  5. 4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
  6. 5、所有场景启动器最底层的依赖
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter</artifactId>
  10. <version>2.3.4.RELEASE</version>
  11. <scope>compile</scope>
  12. </dependency>

场景启动器中包含着具体的依赖

自动配置

自动化配置的原理如下:

一个SpringBoot构建的项目都会有一个入口启动类,其中有个最重要的注解就是@SpringBootApplication
可以用scanBasePackages属性标注扫描哪些包注解
他是一个合成标签:
@SpringBootConfiguration: 它是真正加载项目所需要的jar包的类 , 它主要用于加载 classpath下所有 JAR 文件的 META-INF/spring.factories 文件,并分析出其中定义的工厂类。
@EnableAutoConfiguration: 它就是实现自动化配置的核心 , 加载系统所需的一些配置信息,完成自动化配置。
在EnableAutoConfiguration类中,它使用@Import注解来导入配置类AutoConfigurationImportSelector
@ComponentScan:包扫描

底层注解

@Configuration:设置配置类=配置文件

属性:proxyBeanMethods = true
●FulI模式与Lite模式
如果是true的话,那么这个配置类就会被代理了,被CGLIB代理,Full模式
如果是false的话,那么就不会被代理,就是普通对象,不会检测,Lite模式
当我们使用代理对象的时候,调用它的方法,他会检测容器中是不是有了这样的组件,如果有,则不再新建组件,直接将已经有的组件返回。
如果说没有的话,才会新建组件。这样保证了容器中的组件始终就保持单一性。不过这也有一个不好的地方,那就是每次都要检测,会降低速度。
当不是代理对象的时候,则不会检测,直接创建新的组件了。

@Bean:

给容器中添加组件,以方法名做为组件ID,返回值类型就是组件类型,返回对象就是组件在容器中的实例对象

  1. @Bean
  2. public User getUser(){
  3. return new User();
  4. }

@Import({User.class,SpringWeb.class})

给容器中自动创建出这两个类型的组件

@Conditional:条件装配注解

作用,必须是@Conditional指定的条件成立
才给容器中添加组件,配置文件里面的所有内容才生效
20180901101723169.png

@ConfigurationProperties(prefix = “jdbc”)

自动读取properties配置文件,解析前缀为jdbc
将类中对应的属性赋值
image.pngimage.png

开发技巧

lombok

导入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
底层在编译时添加代码
@Data:添加getset方法
@ToString:添加tostring方法
@AllArgsConstructor:添加有参构造方法
@NoArgsConstructor:添加无参构造方法

热部署

JRebel插件:ctil+F9

核心功能篇

yaml语法:

  1. yaml的基本格式是 k: v (注意:冒号后面有一个空格,而且这个空格是必须的)
    yaml中的字符串默认不用加双引号或者单引号,如果加了双引号或者单引号,则单引号和双引号在yaml中有不同的用法
    “”双引号不会转义字符串里面的特殊字符:特殊字符会作为本身想表达的意思
    例:”张三\n李四” 会表示出 张三 然后是一个换行 然后才是 李四
    ‘’ 单引号会转义字符串里面的特殊字符
    例:’张三\n李四’ 表示出来的就是一个字符串 张三\n李四
    2.使用缩进表示层级关系
    3.缩进时不允许使用Tab键,只允许使用空格。
    4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
    5. 大小写敏感
    6.#表示注释
    7.行内写法和json相似
    1. #对象,map
    2. k: {k1:v1,k2:v2,k3:v3}
    3. #数组,list
    4. k: [v1,v2,v3]

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
    </dependency>
    写yaml文件时会有智能提示
    <build>
    <plugins>
    <plugin>

    <configuration>
    <excludes>
    <exclude>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    </exclude>
    </excludes>
    </configuration>
    </plugin>
    </plugins>
    </build>