2021-11-06(为什么程序员是青春饭)

结论
关于程序员的工作是否是在吃“青春饭”这个话题,在网上及网下的讨论热度,完全不亚于编程语言之争。我先说自己的观点,也希望和大家讨论一下,看看是不是自己哪里想得不对。
结论:程序员确实是吃“青春饭”的。

看到这句话你可能有点失望,我相信你肯定是因为担忧,所以才会关注这个话题。你希望找到一个结论,来证明程序员不是吃"青春饭"的。因为我和你一样,也担忧过。可能你做过的事情,我都已经做过一遍了,比如去看全网的文章。
接下来言归正传( SpringBoot运行原理剖析)
(一) SpringApplication类作用及run()方法作用
 SpringApplication这个类整合了其他框架的启动类, 只要运行这一个类,所有的整合就都完成了.
 调用run函数, 将当前启动类的字节码传入(主要目的是传入@SpringBootApplication这个注解), 以及main函数的args参数.
 通过获取当前启动类的核心信息, 创建IOC容器.
(二) 当前启动类@SpringBootApplication详细剖析
run函数传入的当前启动类字节码, 最重要的是传入了@SpringBootApplication, 点开该注解源码, 会发现有多个注解组成,接下来会详细解释每个注解的含义.
点开这个注解源码, 发现有4类注解.
在这里插入图片描述

(1) 第一类: JDK原生注解4个
@Target(ElementType.TYPE) //当前注解的使用范围
@Retention(RetentionPolicy.RUNTIME) //生命周期
@Documented //声明在生成doc文档时是否带着注解
@Inherited //声明是否子类会显示父类的注解

(2)第二类: @SpringBootConfiguration
点开该注解源码, 会发现本质是@Configuration,定义该类是个配置类功能等同于xml配置文件.
在这里插入图片描述
提到@Configuration就要提到他的搭档@Bean, 使用这两个注解就可以创建一个简单的Spring配置类, 可以用来替代相应的xml配置文件.可以理解为创建了IOC容器了.
(3)第三类: @ComponentScan, 包扫描功能.
这个注解对应Spring的XML配置中的@ComponentScan,其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义, 最终将这些bean定义加载到IoC容器中.
也可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围, 如果不指定, 则默认扫描@ComponentScan所在类的package及子包进行扫描。
注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages, 这样能扫描root package及子包下的所有类.
(4)第四类: @EnableAutoConfiguration
点开源码会发现,本质是@import, 自动导入功能
在这里插入图片描述

  1. @EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器.
    @EnableAutoConfiguration会根据类路径中的jar依赖为项目进行自动配置, 如:添加了spring-boot-starter-web依赖, 会自动添加Tomcat和SpringMVC的依赖, SpringBoot会对Tomcat和SpringMVC进行自动配置.
  2. 那么SpringBoot是如何完成自动配置的呢?
    A. SpringBoot自动配置的注解是 @EnableAutoConfiguration.
    B. 我们用的时候是在启动类上加@SpringBootApplication,这个注解是复合注解,内部包含 @EnableAutoConfiguration
    C. @EnableAutoConfiguration内部有一个@Import, 这个注解才是完成自动配置的关键.
    D. @Import导入一个类(AutoConfigurationImportSelector),这个类内部提供了一个方法(selectImports). 这个方法会扫描导入的所有jar包下的spring.factories文件. 解析文件中自动配置类key=value, 将列表中的类创建,并放到Spring容器中.
    在这里插入图片描述
  3. 8.5.3 总结
    总之一个@SpringBootApplication注解就搞定了所有事, 它封装了核心的@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan这三个类,大大节省了程序员配置时间,这就是SpringBoot的核心设计思想.
    6.6 SpringBoot热部署(了解)
    导入spring-boot-devtools这个jar包: 就可以完成热部署了.
    6.7 SpringBoot中的配置文件(必会)
    (1)有哪些配置文件?
    bootstrap: yml/application
    application: yml/application
    (2)上面两种配置文件有什么区别?
  4. bootstrap由父ApplicationContext加载, 比application配置文件优先被加载.
  5. bootstarp里的属性不能被覆盖.
  6. application: springboot项目中的自动化配置.
  7. bootstrap:
    使用spring cloud config配置中心时, 需要加载连接配置中心的配置属性的, 就 可以使用bootstrap来完成.
    加载不能被覆盖的属性.
    加载一些加密/解密的数据.
    (3)读取配置文件的方式?
     读取默认配置文件
    需要注入Environment类, 使用environment.getProperty(peorperties中的key), 这样就能获得key对应的value值
    @value(${key.value}) 直接读取
     读取自定义配置文件
     自定义配置文件后缀必须是.propeties
     编写和自定义配置文件对应的java类, 类上放3个注解
     @ConfigurationProperties(“前缀”)
     @PropertySource(“指定配置文件”)
     @@Component包扫描
     读取的时候就跟读取默认配置文件一样.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峰sir01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值