SprignBoot中的一些小知识点
Posted 人生不设限!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SprignBoot中的一些小知识点相关的知识,希望对你有一定的参考价值。
1、@Configuration 的 proxyBeanMethods 属性,意思是不是代理bean的方法。
2、@Conditional 条件加载绑定
条件装配的魅力,SpringBoot底层按需加载机制用到很多condition系列的注解,可以去详细看一下。
3、@ConfigurationProperties + @Component (加在容器中 并 进行属性绑定)
加载配置文件中的属性到实体类。
4、SpringBoot 的自动配置原理:
@SpringBootApplication 分为:
5、SpringBoot会在底层配置好所有组件,但是如果用户想自己配置了,则以用户配置的优先。
6、yaml 配置文件加入debug=true ,启动项目时会打印哪些组件生效(positive),那些组件不生效(negative)
7、Springboot 关于整合SpringMVC的一些概念知识
8、SpringBoot 集成SpringMVC 底层静态资源配置
SpringMVC配置类主要集中在:WebMvcAutoConfiguration 这个配置类中,
目录:/org/springframework/boot/spring-boot-autoconfigure/2.4.5/spring-boot-autoconfigure-2.4.5.jar!/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.class
我们进入WebMvcAutoConfiguration类中的一个静态内部类:WebMvcAutoConfigurationAdapter ,注意到该内部类只有一个构造方法:
约定的规则就是:配置类如果只有一个有参构造器,那么构造方法中所有参数的值都会从容器中寻找。
WebProperties webProperties :在内部类的 @EnableConfigurationProperties 注解上已经绑定 WebProperties 到容器中,直接在容器中获取即可
WebMvcProperties mvcProperties:同上一个
ListableBeanFactory beanFactory:相当于Spring的bean 工厂
ObjectProvider<HttpMessageConverters> messageConvertersProvider:找到所有httpMessageConverter
ObjectProvider<WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer> resourceHandlerRegistrationCustomizerProvider:资源处理器的自定义器
ObjectProvider<DispatcherServletPath> dispatcherServletPath, ObjectProvider<ServletRegistrationBean<?>> servletRegistrations:给用注册sevlet、Filter,后来再说
好的,我们继续在类中寻找与静态资源配置相关的方法:
所以:所有静态资源处理规则就在这个方法了,不难看出第一个判断,this.resourceProperties.isAddMappings() ,获取了容器中 resourceProperties 的addMapping 这个 布尔类型的数据
为true 就往下加载静态配置类的规则。
配置了webjars的访问路径(前端的一些js引用也达成了jar供项目引入 )
包括设置静态资源缓存配置时间配置
包括配置静态资源默认的路径
为fale 就直接 在degug级别打印日志 说:默认资源处理器失效,仅用所有静态资源规则,不再允许访问所有的静态资源。
注:(这个 addMapping 就是 配置文件中 spring.web.resources.add-mappings 对应的值)
我们再看一下,SpringBoot 底层封装SpringMVC如何处理欢迎页静态资源的。
继续在 WebMvcAutoConfiguration 这个类中 找到 welcomePageHandlerMapping ,顾名思义 这是欢迎页处理器映射,
我们进入 new WelcomePageHandlerMapping(..) 这个有参构造:
以上是关于SprignBoot中的一些小知识点的主要内容,如果未能解决你的问题,请参考以下文章
Android课程---Android Studio使用小技巧:提取方法代码片段