手记

廖师兄的springboot点餐系统,支付流程

ps:今天无意之间看见师兄的一篇手记,手记的链接我就不给了,因为某种原因,有需求的可以到师兄的手记那里去看,是关于支付流程的,我在这里总结一下,我自己的。

微信支付这里,使用了一个微信支付的sdk(这里使用的是师兄写的bestpaysdk)。

第一步是:公众账号支付设置,填写appid,mchid,mchsecret,notify等信息。

第二步:支付类,将公众号的支付配置信息塞进支付类里,等待支付时调用

第三步:获取支付订单,设置支付方式,以及发起支付

第四步:接收异步通知:

        大神们看完前面四个步骤,支付的流程原理可能就了然于胸了,像我这种菜鸟,才会有疑惑的地方。

        今天在看完师兄的手记之后,我对着师兄手记的流程,走了一遍,看了下数据的流动。到第二步的时候,我感觉,有问题了,为什么,整个项目的全局都没有调过那个方法,然后,在第三步进行@Autowried bestPayService后可以直接进行支付,第二步的公众号配置信息还没有塞到支付类里面啊,这是怎么回事?我表示很懵逼,幸好,我在springboot点餐群里加了个大佬,我就去问他了,他说,项目里的所有的bean都归spring管理,所以,第二步的那个方法上有个@bean的注释(我的第二步截图没有把@bean截出来),就表示这个方法是归spring管理的,直接注入到spring里面的。所以当项目启动的时候,就会自动启动那个bean,也就是把公众号支付配置信息塞到bestPayService这个对象里面去。然后第三步的时候,在@Autowired bestPayService的时候,这里的bestPayService对象就已经有公众号支付配置信息的。

        到这里,肯定好多同学都会疑问,为什么注入bestPayService这个对象就会有呢?即使是第二步已经把公众号支付配置信息塞给这个BestPayServiceImpl类下的对象,但怎么保证第二步塞值的,和第三步注入的BestPayServiceImpl类下的对象是同一个对象呢?这个其实很好解答的,因为spring默认的是单例模式(虽然项目中是springboot,可是我感觉这个没差)。


    课外话题:

                        

        在项目的这个config包下的所有类,上面都有一个@component注解,这个注解代表着,将整个类注入到spring Ioc容器中,交给spring来管理。这些类下面的方法@bean注解表示的是将该方法交给spring管理,说到这里,我自己都有点迷糊,既然把整个类都通过@component注解交给了spring管理,为什么在类中的方法还要通过@bean这个注解重新提交下spring对该方法的管理权呢?这是因为,如果你不进行@bean把该方法给spring管理,那么你注入的@component是一个空的类。一句话总结,就是,没有@bean只有@component,这样子的话,注入的是个空类,是不管用的。

        说到这里,思维活跃的同学应该会问个问题,就是,那我要是只在方法上面写@bean这个注解,而不在类上写@component注解,那这个方法还有用吗?很抱歉,这是没有用的,因为在spring Ioc里压根找不到这个类,怎么从而在这个类中找相应的方法呢?总结就是:@bean是依赖于@component的,只要当@component将整个类注入了,@bean才有资格把方法注入到springIoc里面去。

    值得一提的是@component注解和@configration注解大致用法是一样的。


    PS:

    本文要是有什么概念性问题,或者是其它问题,希望各位多多指正,欢迎指正,同时也谢谢各位“同道”指正。

        


0人推荐
随时随地看视频
慕课网APP