为什么要解释源代码? 直接用别人封装的框架不好吗? 答案如下:
随着互联网的快速发展,加上java跨平台的强大特性,对java程序员的需求与日俱增。 许多大学和培训机构都在大量培训java程序员,以满足市场需求。 知道,不知道为什么。 java程序员有饱和的趋势! ! ! 再加上疫情的影响,很多中小企业的收入大幅下降。 他们可能会选择减少招聘或解雇员工。 很多只会写增删改查、调用API接口、使用框架的java程序员,并没有深入理解其原理。 将面临淘汰之势! ! 解释源码的能力已经成为一个java程序员的优势和能力的体现! ! !
解读源码含义如下:
(1)可以帮助您快速准确定位Bug原因,节省您寻找错误解决方案的时间,减少遇到Bug时的困惑和损失。 这些迷茫和失落是非常令人沮丧的,一旦这些挫折积累到一定程度就会让人产生放弃的冲动! ! ! ! !
(2)提高你的面试资本! !
(3)提高学习能力! ! 为了加快开发速度,降低时间成本,很多公司都会自己封装一些技术。 很多时候,你去公司上班的第一件事就是阅读公司的源代码。 当你有了阅读源码的经验和经验,再加上公司技术专家的指导,你就可以快速上手,同时也加快了你学习其他框架、阅读其他框架源码的速度!
(4)提高个人竞争力! ! 与只能使用别人框架的java程序员相比,那些掌握框架底层原理的java程序员更受欢迎! ! 企业可以降低培训成本,加快开发速度源码是什么,加快产品上市,从而获得市场准入! ! 掌握了框架底层原理的Java程序员才能走得更远,因为了解了框架底层原理,学习了大佬们优秀的设计思想,掌握了核心部分,赶上了技术潮流,不断学习对他们未来的发展和薪资提升具有重要意义! ! !
2、源码解读:
springboot:2.3.2源码由以下部分组成:
(1)springboot启动类
(2)springboot自动组装
3.springboot启动类
(1)@SpringBootApplication:用于标记哪个类是启动类
(2) SpringApplication.run(xxxx.class, args) :启动@SpringBootApplication注解下的类
4.springboot自动组装
点击@SpringBootApplication源码是什么,你会发现它由两部分组成:
(1)@SpringBootConfiguration:用于表示这是springboot的配置类
@Configuration:表示这是一个配置类
@Component:表示配置类也是一个组件
(2)@EnableAutoConfiguration:用于启用surface自动配置
@AutoConfigurationPackage:自动配置包
@Import({Registrar.class}) :导入组件
AutoConfigurationPackages .register :获取主配置类(@springbootApplication标记的类)所在包,并将该包中的所有组件扫描到spring容器中
@Import({AutoConfigurationImportSelector.class}) :告诉容器要导入哪些组件
getAutoConfigurationEntry:获取自动配置的实体
getCandidateConfigurations:获取候选配置
SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()):加载指定的factoryClass并实例化。
SpringFactoriesLoader 。 loadSpringFactories :加载指定的factoryClass。
classLoader.getResources("META-INF/spring.factories") //从META-INF/spring.factories获取资源
ClassLoader.getSystemResources("META-INF/spring.factories") //从META-INF/spring.factories获取资源
5. 总结
(1)springboot启动类:
① 判断项目是普通java项目还是web项目
②查找并加载所有可用的初始值设定项并将它们设置为初始值设定项属性
③找到所有应用程序监听器并将其设置到listeners属性中
④ 推断并设置main方法的定义类,找到运行的主类。
(2)springboot自动组装:
springboot的所有自动配置都会在启动时扫描并加载:/META-INF/spring.factories,同时获取EnableAutoConfiguration指定的值。 所有自动配置类都在里面,但是不一定生效。 需要判断条件是否成立。 ,只要导入对应的start,就可以启动对应的自动组装,就可以配置成功了! !
①springboot启动时,从类路径/META-INF/spring.factories获取指定值
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,
.....
②将这些自动配置的类导入到容器中,自动配置就会生效,帮助我们自动配置
③xxxxAutoConfiguration:自动配置类,xxxxProperties:包配置文件相关属性
例如:搜索 RedisAutoConfiguration
可以选择在application.properites文件中配置相关属性