BaseServlet的实现和原理浅谈
(2015-03-01 20:14:32)
标签:
servlet
javaee
base
反射
//此处代码巧妙之处在于我们把他的service方法覆盖,组织且不用他来调用doxx方法,而是我们让他来调用我们的自己的方法
//一开可能会疑惑为什么会这样?不符合逻辑啊!!错了哥们.是你不符合逻辑,方法本来就是用来互相调用的,只不过看你怎么调用,当然不能破坏人家给你指定好的参数传递的规则
//我们看过源码就可以知道,这个service方法来调用doxx方法也是通过方法getMethod获得方法的名字明来判断的具体要调用那个方法.所以我们也这么做,只不过和他的实现过程不一样
//我们用的是反射.(你也可以把servlet中的doget和dopost看成是我们自己写的. )
//这里我们也是通过方法明来判断,只不过是获取方法明的方法不一样了.
//所以说我们的add和update方法,就相当于是doget和dopost方法
//按照正常的情况我们也可以写成httpservlet的错误实现方法,就是说,父类也有子类的方法,但是如果不重写,父类就会打印出他的所谓的错误信息.
//如果重写了,就不会执行父类的方法了,而是会执行子类的冲写的方法了.
//还有一点是我们要思考的就是父类的方法是固定的,而我们的方法是根据需求而定我们不能因为要增加一个方法就要修改源代码,再编译,在部署到客户端上
//长久下去就麻烦死了.客户还以为你的系统做的不好呢.
//而我们怎么才能解决这个烦恼呢?
//我们怎么才嫩让我们在父类调用我们子类不确定的方法呢?(也就是被子类覆盖的方法,怎么才能指向呢?就要通过反射了)
//我们通过反射把我们要调用得方法通过请求传过来.就像我们在form中的method=post或get
只不过这些都是标配,我们的方法是拓展.但是还有一个区别就是他的传输加密和有大小
//方式get和post我们是该表不了的
//但是还有个巧妙之处容易让我们产生误解,就是我们通过反射在baseservlet中得到了request中传过来的方法,我们随让请求的是指定的userservlet虽然我们执行的是baseServlet的servlet方法,
//但是在baseServlert中执行的时候this.getClass是子类字节码,这!!!!正好是反射的巧妙之处,因为这个service方法是子类调用的,所以我们在service中使用this他是子类的字节码引用(this.getClass是谁最后调用的他就是谁都字节码)
//所以我们通过这个this得到的字节码文件是子类的,字节码文件得到的方法也是子类的.(到这里是不是有好像没有子类覆盖父类的方法那一说,只不过是一开始方便理解而说的)
//所以就可以顺理成章的调用了子类的方法,(那我问你!子类可以调用父类的方法吗?我们可以牵强点说可以,为什说牵强呢?就是因为这个this啊,这个this明明在父类里面但是他调用的
//却是子类的方法)
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。