SpringBoot加载过程

SpringBoot是一个微服务框架。

入口为: SpringApplication

初始化,是在 run()方法内,初始化SpringContext的一些东西。

读取的时候,是读取spring.factories文件里的key value值。

所以你想定制化一些自己的东西,只需要在 META-INF下,加载自己的定制化 initializers listeners。

当然 initializers  肯定要实现 ApplicationContextInitializer 接口的。

 

initializers = 
DelegatingApplicationContextInitializer
ContextIdApplicationContextInitializer
AutoConfigurationReportLoggingInitializer
ConfigurationWarningsApplicationContextInitializer
ServerPortInfoApplicationContextInitializer


pringboot 加载这些东西,主要依赖  SpringApplication中的getSpringFactoriesInstances 方法,去获取相应的类,设计的很好。

具体想看细节的,可以看一下这个方法的源代码。通过反射,实例化,以及类加载器,很好的去某一确定的路径下,加载一些东西。

可以自己保留下来,作为工具类使用。

listeners = 
ConfigFileApplicationListener
AnsiOutputApplicationListener
LoggingApplicationListener
BackgroundPreinitializer
ClasspathLoggingApplicationListener
DelegatingApplicationListener
ParentContextCloserApplicationListener
FileEncodingApplicationListener
LiquibaseServiceLocatorApplicationListener

也是放在 spring.factories里的,读取其中的key、map。如果想要扩展,也是可以自己写spring.factories,然后放在classpath路径下,

一样的前提是 要实现 ApplicationListener 方法。具体加载过程和 initializers 一样。

listeners的使用,是观察者模式。

在 SpringApplication的代码中,new SpringApplicationRunListeners ,并且,通过java反射实例化 EventPublishingRunListener,注册监听事件。

如果自定义监听 ApplicationStartedEvent 事件的实现,继承 SpringApplicationRunListener ,放入自定义的 spring.factories 中。

那么可以监听 事件,进行初始化启动的一些动作。

创建 SimpleApplicationEventMulticaster 事件分发对象;  把 SpringApplication 中初始化的 listeners 全部放入set中。

SpringApplicationRunListeners 调用started()方法,逐一调用
通过 SimpleApplicationEventMulticaster 事件分发对象分别 invokeListener。 调用 listeners 处理 ApplicationStartedEvent 对象。

大概的初始化过程,是debug一步一步,看到的。具体各个listener是干嘛的,还没有去看。

无论怎么样,这也是看代码的一个开始,给自己一个鼓励,慢慢坚持下去吧。后续再细看。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值