依赖管理
父项目实现依赖管理
<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、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
2、在当前项目里面重写配置
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
场景启动器:
当我们需要某个场景的时候,比如我们需要web开发,那么在springboot中我们只需要引入相应的场景启动器,它会帮我们将这个场景下的所有依赖都引入进来,减少了许多繁杂的配置。
1、常见的spring-boot-starter-* : *就某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
5、所有场景启动器最底层的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</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,返回值类型就是组件类型,返回对象就是组件在容器中的实例对象
@Bean
public User getUser(){
return new User();
}
@Import({User.class,SpringWeb.class})
@Conditional:条件装配注解
作用,必须是@Conditional指定的条件成立
才给容器中添加组件,配置文件里面的所有内容才生效
@ConfigurationProperties(prefix = “jdbc”)
自动读取properties配置文件,解析前缀为jdbc
将类中对应的属性赋值
开发技巧
lombok
导入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
底层在编译时添加代码
@Data:添加getset方法
@ToString:添加tostring方法
@AllArgsConstructor:添加有参构造方法
@NoArgsConstructor:添加无参构造方法
热部署
核心功能篇
yaml语法:
- yaml的基本格式是 k: v (注意:冒号后面有一个空格,而且这个空格是必须的)
yaml中的字符串默认不用加双引号或者单引号,如果加了双引号或者单引号,则单引号和双引号在yaml中有不同的用法
“”双引号不会转义字符串里面的特殊字符:特殊字符会作为本身想表达的意思
例:”张三\n李四” 会表示出 张三 然后是一个换行 然后才是 李四
‘’ 单引号会转义字符串里面的特殊字符
例:’张三\n李四’ 表示出来的就是一个字符串 张三\n李四
2.使用缩进表示层级关系
3.缩进时不允许使用Tab键,只允许使用空格。
4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5. 大小写敏感
6.#表示注释
7.行内写法和json相似#对象,map
k: {k1:v1,k2:v2,k3:v3}
#数组,list
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>