(狂神)SpringBoot笔记-------02

(狂神)SpringBoot笔记-------02,第1张

(狂神)SpringBoot笔记-------02 Springboot自动装配原理

自动装配:

pom.xml:

spring-boot-dependencies:核心依赖在父工程中!

我们在写入或者引入一些springboot依赖的时候,不需要指定版本,就是因为有这些版本仓库

启动器


    org.springframework.boot
    spring-boot-starter

启动器:说白了就是Springboot的启动场景

比如:spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖

springboot会将所有的功能场景,都变成一个个的启动器

我们要使用什么功能,就只要找到对应的启动器就可以了 starter

主程序

 注解

@SpringBootConfiguration springboot的配置
@Configuration spring配置类
@Component 说明这也是一个spring的组件


@EnableAutoConfiguration 自动配置
    @AutoConfigurationPackage  自动配置包
         @import(AutoConfigurationPackages.Registrar.class) 导入选择器 自动配置包注册
    @import(AutoConfigurationPackages.Registrar.class)   自动配置导入选择

大家还可以翻看更多底层的原码,我是不看了,我懵逼了,但是理解底层原码还是重要的。

结论:springboot所有自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定会生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们启动装配就会生效,然后配置成功。

结论:

1.SpringBoot在启动的时候是从类路径下的meta-INF/spring-factories中获取EnableAutoConfiguration指定的值

2.将这些值作为自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作。

3.以前我们需要自己配置的东西,自动配置类都帮我们解决了

4.整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中

5.它将所有需要导入的组件以全类名 的方式返回,这些组件就会被添加到容器中

6.它会给容器中导入非常多的自动配置类,{xxxAutoConfiguration},就是容器中导入这个场景需要的所有组件,并配置好这些组件。

7.有了自动配置类,免去了我们手动写配置注入功能组件等工作。

yaml语法

 新建一个项目。

一般不喜欢application以properties为后缀,喜欢用yaml为后缀,我们可以把它删了重新创建一个 

yaml和properties的书写格式是不同的,如果我们想在yaml中修改tomcat端口号:

 

注意和这个空格一定不能删除。

如果我们想定义个值,在之前的properties中key=value

这里我们要key: value

我们的yaml还可以存放对象:

我们可以对比一下存放对象是yaml和properties的区别:

yaml:

 

properties:

存放对象在yaml文件中还可以使用行内写法和js差不多:

yaml中还可以存放数组:

 properties只能存放键值对。

给属性赋予的几种方式

创建一个实体类:

创建有参无参构造方法,get,set方法,toString方法。

 再建立一个类:

同样建立有参,无参构造方法,get,set方法,toString方法。

我们之前spring是怎么给属性赋值的呢?

 运行一下:

我们以前这种原生的赋值方式可以通过这种注解也可以通过new一个对象,我们现在来了解一下新的赋值方式:利用yaml来赋值:

我们可以用这种方式进行赋值。

测试一下:

 

我们接下来来解决一下爆红的问题:

现在就不报红了。

我们也可以用properties文件 

我们的yaml文件还有一些其它的功能:

我们可以给属性赋值随机数,也可以都对属性值进行一个判断。

我们之前的yaml中的maps属性没有和值之间加一个空格,返回值为空。

我们把空格加上

 

测试:

 

 

如果我们加上hello属性:

 

再测试一下:

 

 

对比来看的话,用yaml文件比我们直接用spring注解好多了。

 JSR303校验

我们先来了解一下什么是松散绑定:

我们可以发现我们yaml中名称属性是用-连接,而实体类中是驼峰命名法。属性名称是不一样的,我们运行一下:

 

 

我们发现虽然名称并不完全相同,但是结果也对应上了。这就是yaml文件的一个特性,spring中的@Value()是做不到这点的。

 

JSR303校验

 

 

 我们可以使用一个举个例子:

我们指定我们的name属性必须是Email格式,我们还需要配置一下pom.xml不然有时候可能会爆红:

 

 

我们的yaml中不是email格式。

我们去测试一下:

 

 

 

我们发现它可以给我们错误信息提示。

我们也可以自定义提示的内容:

 

再测试一次:

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5582805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存