疯子在思考之自己动手写MVC

MVC-1
[url]http://lizhizhang.iteye.com/blog/1912005[/url]
MVC-2
[url]http://lizhizhang.iteye.com/blog/1913546[/url]
自己动手写MVC3,前两篇我们分析了MVC的基础,在这里大家对main函数有争论,接下来会有java多线程的文章,与大家分享。(这里会略带一些tomcat main函数的内容)。
第二篇介绍了为什么要用MVC以及MVC的概念,即什么是MVC。
通过以上的了解,我个人认为,对于开发者来讲,MVC的filter即我们在web.xml中配置的拦截器是不重要的,框架为我们写好了,我们做的事情就是配置一下就可以了,而我们更关注具体的业务逻辑和VIEW,而如果我们自己写一个MVC那么,我觉得关注点就是开发人员不关心的那部分。即filter。业务逻辑和VIEW要留给开发人员自己实现。
那么filter中具体要实现哪些功能呢?

1、action方法映射
2、拦截器
3、参数注入
4、模型驱动(模型参数注入)
5、路由跳转
6、action方法的执行
参考struts及spring mvc其实有两种实现方法,对比而言,spring mvc的方法更简单效率更高。

这里附参数注入代码

private Object[] actionIoc(ServletRequest request, ActionEntity actionEntity) {
// 参数名称列表
List<String> parameterList = actionEntity.getParameterNameList();
Class<?>[] parameterClass = actionEntity.getMethod()
.getParameterTypes();
BeanFactory beanFactory = BeanFactory.getInstance();
// 参数列表
Object[] args = new Object[parameterList.size()];
for (int i = 0; i < parameterList.size(); i++) {
String parameterName = parameterList.get(i);
// 如果是基本数据类型
if (parameterClass[i].equals(String.class)) {
args[i] = request.getParameter(parameterName);
} else {
Object entity = null;
try {
entity = parameterClass[i].newInstance();
} catch (Exception e) {
Log.getInstance().error(e);
return null;
}
MethodAccessor methodAccessor = beanFactory
.getProxyBean(parameterClass[i].getSimpleName());
Method[] methods = parameterClass[i].getMethods();
for (Method method : methods) {
if (method.getName().startsWith("set")) {
String parameterName4Request = parameterName
+ "."
+ StringUtil.setFirstByteLowerCase(method
.getName().substring(3));
methodAccessor.set(entity, method.getName(),
request.getParameter(parameterName4Request));
}
}
args[i] = entity;
}
}
return args;
}


methodAccessor的思想是这样的
对于模型驱动而言,这里没有采用jdk反射或cglib字节码反射,而是生成一个代理类来变相反射(实际上是对象方法的直接调用)对于这部分思考有兴趣的朋友可以参考reflectasm。

其他代码可以在框架中下载
[url]http://lizhizhang.iteye.com/blog/1896545[/url]
有什么意见或建意可以在这里拍砖。
MVC这部分比较简单,大家有什么好想法可以继续补充,接下来ORM....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值