趣谈 Spring

作者: 徐志毅 | 来源:发表于2018-03-30 00:30 被阅读0次

    背景
    李诞,脱口秀演员,单身,由于平时事业繁忙,无暇打点家里,自己在家就是随便对付,家里总是一团糟,也从不敢带朋友回家看看。
    直到有一天,李诞去了王自健家里,才发现什么叫差距。自健家里井井有条,干净利落。这时李诞就不解了,拉着自健到角落问:

    李 诞:健哥,你天天工作这么忙,怎么能把家里收拾得这么好呢?
    王自健:这哪是我干的啊,我花钱雇保姆了呀!
    李 诞:健哥,你这路子熟,给我也推荐一个呗,我家乱得不行了。
    王自健:呐,这是大S的名片,有事全找她。


    事后,李诞立马联系大S,高价请她来当全职保姆。
    大S第一次来到李诞家,李诞首先得跟她讲清楚工作职责,哪些东西和事情该归她负责,于是列了一个工作清单(spring.xml文件配置)

    1、衣服、鞋子、袜子等平时都给我准备好(bean管理);
    2、要啥就给我拿啥(@autowired自动注入);
    3、吃饭时,先盛好饭(前置增强);
    4、吃完后,把碗洗好(后置增强);
    5、进门时把拖鞋准备好,出门后把拖鞋放回原位(事物管理);
    6、那些我贴纸条的地方,都按纸条的意思给我办好(自动扫描注解);
    。。。
    

    一拿到这份清单,大S一看一目了然,很快便进入了工作状态。大S其实有点小聪明,在开始并没有把所有的东西准备好,只是把他记在脑子中(BeanDefinition,对bean的一种抽象定义),等李诞真正需要的时候再给他准备(lazy-init,懒加载,默认加载策略)

    有一天李诞早上着急出去开会,找大S要今天穿的衣服,大S说稍等下(准备ing...)。五分钟过去了,衣服还没拿来。李诞慌了,以为会议马上就要开始了。这时他播出了王自健了电话:

    李 诞:健哥,你这也太坑人了,你给我推荐的大S干活也太慢,那个衣服那么久,今天开会肯定要迟到了。
    王自健:哦,这样子啊,忘记告诉你了,你要着急用的东西,你得一开始就跟她说好,不然她都是现准备的。

    吃一堑,长一智。李诞马上修改了工作清单,并让大S重新读一遍(重启spring容器)

    #修正第一条
    1、衣服、鞋子、袜子等平时都给我 提前(非懒加载) 
         准备好(bean管理);
    //其他不变。。。
    

    第二天,李诞早上依然要开会。又找大S要衣服、鞋子、袜子。这回由于采用了非懒加载策略,马上大S就把所有东西拿过来了。李诞很满意,穿着穿着李诞发现袜子臭臭(Singleton单例模式)。李诞憋不住了,拿起电话遍准备开骂王自健:

    李诞:王自健,你这给我介绍的都什么玩意,袜子天天洗都不洗,臭死了。
    王自健:李诞,你这脚臭也不能怪人家,自己也该洗脚了。
    李 诞:行了,建哥,别损我了,你就说这个臭袜子的事怎么办吧。
    王自健:这事你也得跟大S说好,每次都要新的。大S这不也是给你省水省电嘛!

    这回李诞又涨了教训,马上重新修订工作清单,如下:

    #修正第一条
    1、衣服、鞋子、袜子等平时都给我 提前(非懒加载) 准备好,
      每次必须是新的(Prototype原型模式)(bean管理);
    //其他不变。。。
    

    在大S的打理下,日子渐渐变得井井有条,李诞的事业也蒸蒸日上,成为了中国脱口秀界的扛把子,也挣了不少钱,开始膨胀了。于是买了一栋大别墅,依旧请大S打点。
    随着李诞名声的扩大,逐渐由朋友、名人来摆放李诞,李诞为了更好的找到各位来宾,又找王自健介绍了小S(spring mvc)来看门。进行来访宾客登记和接待(HandlerMapping)。

    小S很懂规矩,一来看到家里已经有大S了(从servlet中发现根容器),就抱大S的大腿,认大S做大哥(spring与spring mvc的父子容器关系)。

    既然大S是小S的大哥,那小弟的事就是大哥的事,小弟的问题都优先找大哥解决。所以小S可以拿到所有大S管理的东西(bean)。

    现在李诞也是逼格的选手了,定了一个规矩,只有他准备了拖鞋的人才能进李诞家,拖鞋上贴每个人的名字(@RequestMapping)

    @RequestMapping("/池子")
    @RequestMapping("/王建国")
    @RequestMapping("/王自健")
    。。。
    

    李诞认为一切就绪,便约了王建国来别墅打游戏。然而意外发生了。。。
    王建国走到李诞家门口,被小S给拦住了,硬是没让进(报了个404),因为没找到王建国的拖鞋。
    王建国很生气啊,在门口大骂李诞一通。李诞听到了,当然还是第一个打给了王自健。

    李 诞:王自健,怎么回事啊,小S瞎吗,那么大字条贴在那里都不放人进来?
    王自健:哎,李诞,先别急,小S很称职的,肯定是你没跟大S小S沟通好,小S在看门这个事情上是不会去问大S的。

    //默认不在父类寻找
    detectHandlerMethodsInAncestorContexts = false
    

    李诞弄清楚原因后,又重新调整了工作清单,并将清单分为两份,大S一份,小S一份:

    //大S的
    1、衣服、鞋子、袜子等平时都给我 提前(非懒加载) 准备好,
      每次必须是新的(Prototype原型模式)(bean管理);
      备注:客人的鞋子不用管(即spring不检查action)
    2、要啥就给我拿啥(@autowired自动注入);
    3、吃饭时,先盛好饭(前置增强);
    4、吃完后,把碗洗好(后置增强);
    5、进门时把拖鞋准备好,出门后把拖鞋放回原位(事物管理);
    6、那些我贴纸条的地方,都按纸条的意思给我办好(自动扫描注解);
    
    //小S的
    1、管理好客人的鞋子 (扫描action)
    2、送快递的直接放门口的柜子(对图片等请求特殊处理,静态资源映射)
    3、有名字的人进来也要进行权限认证(前置增强);
    。。。
    

    一切安排妥当,重新修订工作清单后,王建国也顺利进入李诞的别墅,愉快的开黑。

    又这样过了一段时间,感觉一切都很美好。可是随着李诞的国际化,不知从哪里学了点洋玩意,开始往工作清单里写英文。

    <dubbo:application name="demo-provider"/>
        <dubbo:registry address="multicast://224.5.6.7:1234"/>
        <dubbo:protocol name="dubbo" port="20880"/>
        <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
    <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/>
    

    这真是看得大S一脸懵逼啊,完全不懂诞总想表达什么。李诞也觉得大S一点都不懂他了。于是又呼出了救命电话:

    李 诞:歪,健哥,这个大S现在越来越不懂我了,说个dubbo她都不懂,怎么办啊!
    王自健:李诞啊,你这些新词儿大S不会很正常啊,你要想让她懂你,你得先打开她的心呀!
    李 诞:健哥,别逗我了,我哪儿会打开什么心啊!
    王自健:大S每次读清单都会摸口袋你没注意吧,你把你的新词解释放在她口袋里就行啦!
    李 诞:好勒,谢谢健哥!

    于是李诞写好了自己的新词的解释,做成卡片放在大S的口袋里(实现NamespaceHandler,自定义命名空间),此法一下,李诞又过上了潇洒的生活。


    • 本文尽量用诙谐幽默的语言来带入spring的功能或者扩展,希望博大家一乐的同时能有所收获。
    • 文中人物纯属虚构,与现实原型无关,如有冒犯,请告知。
    • 本文为原创文章,未经允许不得转载。

    相关文章

      网友评论

        本文标题:趣谈 Spring

        本文链接:https://www.haomeiwen.com/subject/nodvcftx.html