SpringBoot2学习笔记
SpringBoot2学习笔记 目标:掌控雷电之人,而非锤子之神!
容器功能
组件添加
1.@Configuration
-
基本使用
-
Full模式与Lite模式
-
- 示例
- 最佳实战
-
-
- 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
- x配置类组件之间有依赖关系,方***被调用得到之前单实例组件,用Full模式
-
Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】[[[[[每次给的是同一个pet,默认是Full模式
Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】[[[[每次给的是新的pet
组件依赖必须使用Full模式默认。其他默认是否Lite模式
2.@Conditional
条件注解
@ConditionalOnBean(name = "name")
当容器中有名字叫name的组件的时候,下面这堆代码才生效
3.@ImportResources
@ImportResources("classpath:beans.xml")
//导入spring的配置文件的方式
@Bean是给容器加东西的
配置绑定
1.@ConfigurationProperties
注解,配置属性
@Component //只有在容器中的组件才会拥有容器提供的功能
@ConfigurationProperties(prefix = "mycar")
与核心配置文件中mycar为前缀的值们进行绑定
@Autowired // 自动注入,把容器中的Car返回过来
Car car
@RequestMapping("/car") //处理一个请求
在容器里加这句注解
@EnableConfigurationProperties(Car.class)
可以把car这个组件注册到容器里
====
在car.class里加这句注解
@Component
也可以
自动配置
1.@SpringBootApplication
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
@SpringBootConfiguration
@Configuration代表当前是一个配置类
@ComponentScan("com.atguigu.boot")
指定要扫描的包
@EnableAutoConfiguration
@AutoConfigurationPackage //自动配置包,将指定 (MainApplication)包下的所有组件导入进来
@Import(AutoConfigurationImportSelector.class)//虽然130个场景所需要的配置都会默认加载,但是是按条件装配规则@Conditional 按需分配
AutoConfigurationImportSelector.class:::::::
讲自动配置源码了,听不懂
注解+映射+设计模式
分析哪些生效哪些不是生效,是怎么工作的
例:
spring.aop
,导(加载)进来了,走@ConditionalOnProperty,看配置文件中是否存在spring.aop,如果存在,有auto这个配置,并且值是true,那它就往下执行,如果没有值(没有配),matchIfMissing=true默认是true
往下执行了还有判断,如果不满足不生效
springMVC的核心:DispatcherServlet
首先,@Bean给容器中注册这个组件,然后,new一个DispatcherServlet,里面把东西设置好后返回它
springMVC文件传输解析器 MultipartResolver
当容器中有这个类型的组件,却没有这个名字的组件,就把你名字改成我的,防止用户配置的文件上传解析器名字不符合规范
SpringBoot默认会在底层配置好所有的组件,但是如果用户配置了,会以用户优先
自动配置总结
1.SpringBoot先加载所有的自动配置类, XXXXXAutoConfiguration
2.每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。XXXXProperties和配置文件进行了绑定
3.生效的配置类就会给容器中装配很多组件
4.只要容器中有这些组件,相当于这些功能就有了
5.定制化配置
5.1用户直接自己@Bean替换底层的组件(整个组件的修改)
5.2用户去看这个组件是获取的配置文件什么值就去修改(局部改值)
XXXXAutoConfiguration ---> 组件 ---> XXXXProperties里面拿值 ---->application.properties(配置文件)
会改SpringBoot的配置文件了就能修改场景配置
1.要么看文档
2.要么查底层,看跟哪个Properties进行绑定,如缓存
@EnableConfigurationProperties(CacheProperties.class)
点进CacheProperties.class看到
@ConfigurationProperties(prefix = "Spring.cache")
prefix就是以什么为开头,,
所以在配置文件里就能写
spring.cache.什么东西,一句话的事
面向配置编程哈哈哈
最佳实践
1.引入场景依赖
using-boot-starter
2.修改场景依赖
2.1参照文档修改配置项
2.2自定义加入或者替换组件
@Bean
@Component
2.3自定义器 XXXXCustomizer
Lomboc简化开发
双引号里的\n无效,单引号里的\n会生效