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

MVC-1
http://lizhizhang.iteye.com/blog/1912005
MVC-2
http://lizhizhang.iteye.com/blog/1913546
自己动手写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。

其他代码可以在框架中下载
http://lizhizhang.iteye.com/blog/1896545
有什么意见或建意可以在这里拍砖。
MVC这部分比较简单,大家有什么好想法可以继续补充,接下来ORM....

猜你喜欢

转载自lizhizhang.iteye.com/blog/1914775