从springboot自动装配、监听与自定义功能的执行原理到配件市场

springboot构建在spring-framework之上,Java bean的自动装配就是一个用户声明后靠框架自动实例化再放入spring bean容器的过程,容器有好几层,各有应用场景和生命周期,不必细究。

springboot以Bean为单位,以注解为标识,以bean工厂声明配置为突破口,以main方法为启动点,以一系列回调操作发起bean的装配,最终实现bean工厂的初始化。所有的类型,都是在spring启动时,一过性的加载的。

本文主要讲4种情形的原理:

1.自动装配

2.事件监听

3.自定义功能的执行

4.hook机制

这里面存在的问题:并发风暴(安全),优先级(一致性),死锁,吞吐量,内存管理。核心细节异常复杂,这里简单说几个,有不准确的地方权当一种理解方式。

首先说自动装配,网上关于自动装配的解释有很多,用代码说的也很多,不过都比较难懂。浓缩为一句话讲,自动装配是个过程。自动装配首先是springboot框架实现的一种回调机制,通过回调注册所有bean到bean工厂,完成自动装配。发现这些bean的依据是bean用指定注解标识,然后是在工厂指定的配置文件中声明要实例化的bean的完整路径名,这是一个键值对,键可以理解为一个扩展点,value是具体扩展的实现类,当springboot启动时会通过回调和反射机制实例化这些bean,并加入到bean工厂容器中,供其他类依赖和调用,其他类通过自动装配注解完成所依赖的那些bean的注入。

然后说,事件监听,监听器是一个常驻内存的守护线程,框架的设置使得事件发生时在请求响应链路上触发该监听的回调方法,最终完成监听操作。

第三种回调是指自定义功能的执行,比如缓存管理,实现了springboot框架指定的缓存接口后,然后定义自定义操作,springboot会在缓存操作时调用用户自定义的操作。

以上3种回调机制,有一个共同点,那就是一过性的,并且主动权都在框架侧,用户只要满足了一定标识或者继承关系,就能在适当的时候触发框架侧所预埋的调用,这种模式的不足在于他仅能定制框架指定的操作规则,无法出框架的圈子,框架相当于做了底层设计和顶层规划。

那么第四种回调,就是真正的扩展能力了。hook机制与前三种的区别在于,通过预埋扩展点不仅仅能响应事件的驱动,而且可以在运行时完成动态的扩展注册和扩展回调,在不需要时还可以卸载掉这个扩展注册。这就相当于把java和springboot作为操作系统底座,把扩展作为app应用程序,任意在上面安装、卸载,从而实现系统的无限扩展能力,这就是配件逻辑。市场化的配件,就是配件市场。可以看出hook机制,是实现配件的关键核心能力。

回调中,比较难搞的问题是并发和优先级。前三种回调场景,都是一过性的,可以理解为固定的范式写死了,基本没有太大的问题。第四种回调,面临着并发注册(基于扩展点的并发注册)、并发调用以及优先级(并发发起某个扩展点的回调,对注册在该扩展点的扩展队列执行优先级)、并发被调用(被调用的扩展并发场景)。

至于代码级的理解,可以百度自行研究,一个原理性的东西不在于如何实现,只要从逻辑上行得通,就一定可以实现

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《从springboot自动装配、监听与自定义功能的执行原理到配件市场
本文地址:http://www.xiupu.net/archives-11180.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!