1.首先仍然是参数接收问题,老实觉得老师的代码写的是有问题的,
就是在 handle 方法中用这种方式准备 invoke 的参数有什么用吗??我想了好长时间,这个 args 里边存放的只是参数的名字。但是 invoke 要传递的参数是参数的值。所以后来我就想了上边这种写法,根据参数名称(key)从 request 里边获取,然后这样写完,打包运行,得到如下结果
对,他是说我调用 invoke 的那一行出现了空指针错误,然后初步判断就是参数为空或者是 controller 是空的。
2.开始 dubug,打印参数,重新运行是没问题的,那接下来肯定就是哪个 controller 有问题了。由于以前是直接 newInstance 是没问题的,现在换成了依赖注入模式就出了问题,所以目前肯定是 beanFactory 写的有问题。
3.然后就准备在主函数的 bean 初始化之后输出一下 beanfactory 创建的 bean,然后我就发现,自己根本就没有写初始化,emmm 我可真是个憨憨
4.于是我就写上初始化,在遍历一次
发现抛出了一个异常,是在初始化时候自己抛出来的,就是出现了循环依赖的异常,所以就没有再往下执行了。
然后再次查看 beanFactory 的代码
终于发现了错误,这个地方是我理解错我了,其实 beanFactory 中 put 进去的是一个对象,所以在 put 之前这个对象的所有属性都必须是装配完毕的(如果可以装配完毕,也即是没有返回 false),所以必须在 for 循环执行完毕之后。
因此需要把大红色箭头的代码挪到下边。如下图
5.再次打包运行
终于正常返回结果了。
6.至此,这个 mini-spring 框架算是完成了。完成了 spring 和 springmvc 的基本功能。但是仅仅是基本功能,整体上来说还是十分粗糙的,例如没有进行相应的异常处理。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于