SpringBootday1

SpringBootday1

数据效验

@Validated
@NotNull(message="名字不能为空") 
private String userName; 
@Max(value=120,message="年龄最大不能查过120") 
private int age; 
@Email(message="邮箱格式错误")
private String email;

空检查
@Null 验证对象是否为null 
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串 
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空 格. 
@NotEmpty 检查约束元素是否为NULL或者是EMPTY. Booelan检查 
@AssertTrue 验证 Boolean 对象是否为 true 
@AssertFalse 验证 Boolean 对象是否为 false 
    
长度检查 
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 
@Length(min=, max=) string is between min and max included. 
    
日期检查 
@Past 验证 Date 和 Calendar 对象是否在当前时间之前 
@Future 验证 Date 和 Calendar 对象是否在当前时间之后 
@Pattern 验证 String 对象是否符合正则表达式的规则 

    
 .......等等 除此以外,我们还可以自定义一些数据校验规则

以**HttpEncodingAutoConfifiguration****(Http编码自动配置)**为例解释自动配置原理;

//表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件; 

@Configuration 

//启动指定类的ConfigurationProperties功能; 

//进入这个HttpProperties查看,将配置文件中对应的值和HttpProperties绑定起来; 

//并把HttpProperties加入到ioc容器中 

@EnableConfigurationProperties({HttpProperties.class}) 

//Spring底层@Conditional注解 

//根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效; 

//这里的意思就是判断当前应用是否是web应用,如果是,当前配置类生效 

@ConditionalOnWebApplication( 

type = Type.SERVLET 

)

//判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器; 

@ConditionalOnClass({CharacterEncodingFilter.class}) 

//判断配置文件中是否存在某个配置:spring.http.encoding.enabled; 

//如果不存在,判断也是成立的 

//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的; 

@ConditionalOnProperty( 

prefix = "spring.http.encoding", 

value = {"enabled"}, 

matchIfMissing = true 

)

public class HttpEncodingAutoConfiguration { 

//他已经和SpringBoot的配置文件映射了 

private final Encoding properties; 

//只有一个有参构造器的情况下,参数的值就会从容器中拿 

public HttpEncodingAutoConfiguration(HttpProperties properties) { 

this.properties = properties.getEncoding(); 

}

//给容器中添加一个组件,这个组件的某些值需要从properties中获取 

@Bean 

@ConditionalOnMissingBean //判断容器没有这个组件? 

public CharacterEncodingFilter characterEncodingFilter() { 

CharacterEncodingFilter filter = new 

OrderedCharacterEncodingFilter(); 

filter.setEncoding(this.properties.getCharset().name()); 

filter.setForceRequestEncoding(this.properties.shouldForce(org.springframew 

ork.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST)); 

filter.setForceResponseEncoding(this.properties.shouldForce(org.springframe 

work.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE)); 

return filter; 

}

} 

一句话总结 : 根据当前不同的条件判断,决定这个配置类是否生效!

一但这个配置类生效;这个配置类就会给容器中添加各种组件;

这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定

的;

所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;

配置文件能配置什么就可以参照某个功能对应的这个属性类


1、SpringBoot启动会加载大量的自动配置类

2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需

要再手动配置了)

4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中

指定这些属性的值即可;

xxxxAutoConfifigurartion**:自动配置类;**给容器中添加组件

**xxxxProperties:**封装配置文件中相关属性;

@Conditional

了解完自动装配的原理后,我们来关注一个细节问题,自动配置类必须在一定的条件下才能生效;

@Conditional派生注解(Spring注解版原生的@Conditional****作用)

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciJ960dq-1646721857326)(C:\Users\mimo9527\AppData\Roaming\Typora\typora-user-images\image-20211224144356766.png)]

那么多的自动配置类,必须在一定的条件下才能生效;也就是说,我们加载了这么多的配置类,但不是

所有的都生效了。

我们怎么知道哪些自动配置类生效?

我们可以通过启用 debug=true****属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪

些自动配置类生效;

#开启springboot的调试类 
debug=true

Positive matches:****(自动配置类启用的:正匹配)

Negative matches:****(没有启动,没有匹配成功的自动配置类:负匹配)

Unconditional classes: (没有条件的类)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值