初识SpringBoot
参考
- https://www.bilibili.com/video/BV19K4y1L7MT
- https://www.yuque.com/atguigu/springboot/rmxq85
- https://docs.spring.io/spring-boot/docs/2.4.3/reference/html/getting-started.html
早有耳闻 SpringBoot,这次终于是见识到了,在见识之前就有听说过“started”,“脚手架”,“简化开发”等等关于 SpringBoot的优点,这次总算是初识庐山真面目了。
首先我要说雷丰阳2021版SpringBoot2零基础入门springboot全套完整版(spring boot2)讲的真是太棒了,第一次接触真的能收获太多了,尤其感觉讲的非常有条理,循序渐进,先讲简单应用,再从源码分析原理。有一次看到一个章节直呼SpringBoot实在是太妙了,感叹了半天。
自动装配原理
我不奢求能把它说清楚,我只是想把我目前的理解说一说,有不对的还请见谅。
首先
要知道SpringBoot几个基本注解
@Configuration
- 声明为配置类
- proxyBeanMethods 默认为true,表示组件是单实例的
@Bean、@Component、@Controller、@Service、@Repository
- 这些在Spring、SpringMVC都见识到了,都是用来配置组件的
@ComponentScan、@Import
- 组件扫描和组件导入
@Conditional
- 条件装配,非常重要,在我看来自动装配主要由它实现
@ImportResource
- SpringBoot几乎不使用Spring传统的xml配置,如果还是想用则可以使用这个配置,声明xml的classpath即可
@ConfigurationProperties
- 属性绑定
- 因为它可以在配置文件实现properties或是yaml配置
@EnableAutoConfiguration
- 依据配置自动导入相关配置,重要,理解自动装配,要研读源码中的xxxAutoConfiguration相关类
原理初解
自动装配就是利用上面的注解(当然还有许多其他的)实现的
查看如下SpringBoot是如何实现web.servlet的自动装配的
1 | package org.springframework.boot.autoconfigure.web.servlet; |
@Configuration(proxyBeanMethods = false)
- 声明配置类,并不使用单例模式(实现单例模式相对于不实现更快一些,因为不用检查)
@ConditionalOnWebApplication(type = Type.SERVLET)
- 条件装配,这个表示是web项目时装配
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
- 条件装配,类路径下有指定的类时装配
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
- 条件装配,当容器中没有该组件时装配
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
- 声明类加载优先级
@AutoConfigureAfter(...)
- 声明类加载在...之后
1 |
|
@Bean
- 组件声明
@ConditionalOnMissingBean(HiddenHttpMethodFilter.class)
- 条件装配,当没有xxx组件时装配
@ConditionalOnProperty(prefix = "spring.mvc.hiddenmethod.filter", name = "enabled", matchIfMissing = false)
- 配置绑定,前缀时"spring.mvc.hiddenmethod.filter",该配置为前缀下的”enabled“属性
- matchIfMissing若缺少配置这配置为false,相当于默认配置
小结
自动装配
- 加载自动配置类
- 条件装配
- 用户配置优先
下面是复制的一段
SpringBoot优点
Create stand-alone Spring applications
- 创建独立Spring应用
Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
- 内嵌web服务器
Provide opinionated 'starter' dependencies to simplify your build configuration
- 自动starter依赖,简化构建配置
Automatically configure Spring and 3rd party libraries whenever possible
- 自动配置Spring以及第三方功能
Provide production-ready features such as metrics, health checks, and externalized configuration
- 提供生产级别的监控、健康检查及外部化配置
Absolutely no code generation and no requirement for XML configuration
- 无代码生成、无需编写XML
SpringBoot是整合Spring技术栈的一站式框架
SpringBoot是简化Spring技术栈的快速开发脚手架
SpringBoot缺点
- 人称版本帝,迭代快,需要时刻关注变化
- 封装太深,内部原理复杂,不容易精通