Java EE 开发框架(Spring+SpringMVC+MyBatis)入门后感(大二学生第一篇博客)

        首先,我是大二的学生,在各种类型的博客中汲取了很多对专业技术,生活,以及学习上的新的认知。也在在Java学习的道路上看了不少的技术文档,看到各种层次的技术人员对同一问题的不同见解,确实获益匪浅。时至今日,我想我也应该在博客中对之前的学习做一个总结,以求更大的进步。望请各位前辈多多指正。


        初次分享,我以自学的Java Web的三大开发框架——Spring,SpringMVC,MyBatis 为选题。

        首先,先来谈谈MyBatis,数据持久层框架,取代了JDBC代码和手动操作参数及获取结果集的方式,支持定制化sql,存储过程。以Java的反射为基础,用简单的XML配置文件或注解来配置和映射原生信息(现在还没有尝试过用注解实现MyBatis的配置),将接口和Java Bean映射成为数据库中记录。在单独使用MyBatis框架进行练习时,并没有发现它哪里方便,因为在这之前我用元数据(ResultSetMetaData)来获取字段数量和字段名称,将其对应的数据存在Map中,然后再把Map放在List中,并以此作为工具类中查询方法(参数为:sql语句和查询条件Object[] 数组)的返回值,在业务层的查询方法中只需要写Sql语句和查询条件即可。工具类中查询方法如下:

public static List executeQuery(String sql, Object[] p) {	
		List list = new ArrayList();
		con = getCon();
		try {
			ps = con.prepareStatement(sql);
			if (p != null) {
				for (int i = 0; i < p.length; i++) {		
					ps.setObject(i + 1, p[i]);
				}
			}
			rs = ps.executeQuery();
			while (rs.next()) {			
				ResultSetMetaData md = rs.getMetaData();	
				int col = md.getColumnCount();
				Map<String, Object> rowData = new HashMap<String, Object>();
				for (int i = 1; i <= col; i++) {
					rowData.put(md.getColumnName(i), rs.getObject(i));
				}
				list.add(rowData);	
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeAll();			
		}
		return list;
	}

使用这个工具类做开发除了可维护性比MyBatis低了很多,在便利性上差不多(当然是对于现在学习阶段);但在网上的博客论坛中和与老师的交流中都说单独使用一个框架并不能发挥它的最大功力。于是我就开始在网上找Spring框架的学习资料,因为当时正在准备Microsoft的MCP认证,Spring框架的学习周期很短...

       再来谈谈我对Spring框架的理解:Spring框架作用于业务层,在笼统地学习Spring时,IOC(控制反转)和AOP(面向切面)两个程序设计思想吸引了我;IOC与DI(依赖注入)配合-用于降低对象间的耦合,在我看来,就是在平常的开发中,代码写到哪需要引入外部资源了,我们就去创建对象来对程序进行被动式补充,这样就造成了模块与模块间依赖程度随着代码的复杂程度越来越高,这就是我所理解的耦合。而Spring的出现,就是通过较为简单(与随时new对象相比较)的配置文件将new对象的这一过程交给Spring容器(在这里,只有实现了Java Bean的规范的类才能交给Spring容器接管-Java Bean是一种可重用的组件—实现的条件:1.必须是public修饰的类。2.有无参构造方法。3.有公共的getter和setter),再由容器通过DI将某个依赖关系注入到组件中(一个系统中可能会有成千上万个对象,如果要就以上叙述中去被动地,手动去维护它们的关系,这是不可想象的。那么我们可在Spring的XML配置文件中描述它们的关系,再由Spring容器通过getter和setter进行注入)。依赖注入的目的不是给程序带来更多功能,而是提升组件(对象)的重用性。只需要通过简单的配置而无需繁杂的代码即可指定目标资源,完成业务逻辑,无需关心具体的资源的来源,由谁实现。DI的实现就是依赖于Java反射,允许在程序运行时动态生成对象,执行对象方法,改变对象属性;然后就是AOP:这里就不得不提起Java的OOP,面向对象编程思想,引入封装,继承,多态来建立一种对象层次结构,但这种结构只适合开发者定义纵向的关系,对于横向关系,最具代表性的就是日志;这里就有了AOP,利用“横切”的技术剖解开封装对象的内部,将影响了多个类的公共行为封装到一个可重用的模块,这个模块就叫做切面。我的理解是:既然上面说到AOP的优势就是横向关系,而且在我对Spring框架的练习过程中,我认为贯穿到系统的各个模块中所共有的一个功能就是一个切面。最具代表性的功能:统一异常处理,日志,权限管理...所以,面向切面编程就是把贯穿系统的一个功能封装成对象的形式来处理。那么实现这样的思想就要依靠几种通知来决定切面的贯穿时机。当然,还有几个必须理解的Spring中面向切面编程思想的核心概念:1.切面(上面有叙述)。2连接点:是指程序在运行过程中能够插入切面的一个点,这个点可以是调用方法时,抛出异常时,甚至修改一个字段时;切面可以在利用这些点插入到程序的正常流程之中,并添加新的行 为。3.切点:上面说过通知决定切面的贯穿时机的话,那么切点就决定切面的贯穿位置-切点的定义会匹配所要织入的一个或多个连接点。那么,切面就是切点+通知,类似于几何中的点线成面(切点的定义是为了匹配多个连接点,而通知则是将连接点规整的连接线)。4:织入:我用一句话来说明:织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。与反射方式创建对象类似,可以选择在目标对象的哪个命周期进行织入。当然,使用反射动态创建对象的方式更灵活,但需要以损耗性能为代价。至此,Spring框架总结就结束了。笼统地学完Spring框架。我就迫不及待把Spring和MyBatis进行整合,整合时我确实是应对不来,于是乎在网上找了视频,跟着进行配置。那天我清楚地记得,从早上到晚上,Eclipse的控制台一直是红字,不断地百度,找解决方法。一直到23点半左右,测试类运行成功,那莫名的成就感~至此,我才真切的认识到框架开发的必要性,一切都变得如此得心应手。之前不用框架做项目,要写好多重复代码,早就烦透了。这可真是我这直男的福音   哈哈-_-

        那既然学了数据持久层和业务层框架,加上当时正是期末项目开始,干脆就把WEB层SpringMVC框架也学了,直接用三大框架来做期末项目。于是继续在网上找学习视频,跟着视频进行配置,与Spring框架配置相反,SpringMVC的配置一把过。因为SpringMVC是基于MVC开发模式的Spring框架的模块,因此SpringMVC与Spring无需通过中间整合层进行整合。那来谈谈SpringMVC的运行原理:1. 客户端请求提交到DispatcherServlet
2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
3. DispatcherServlet将请求提交到Controller
4. Controller调用业务逻辑处理后,返回ModelAndView
5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
6. 视图负责将结果显示到客户端
DispatcherServlet是整个Spring MVC的核心。Spring提供的前端控制器,所有的请求都有经过它来统一分发。DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。 它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
1. 截获符合特定格式的URL请求。
2. 初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
3. 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

当然,相比于实现接口以使用SpringMVC的功能,我更中意使用注解来实现。只需要在配置文件中写几行配置代码,便可使用注解来取代好多繁杂的代码。我做的期末项目只用了几种注解就可以应对现阶段的开发。1:@Controller:SpringMVC中Controller负责处理DispatcherServlet 分发的请求,他把用户请求的数据经业务处理层处理之后封装为一个Model,然后把该Model返回给对应的View(jsp)进行显示。在SpringMVC中提供了一个非常简便的定义Controller 的方法,无需继承特定的类或实现特定的接口,只需用@Controller来标记一个类是Controller然后用@RequestMapping来定义URL请求和Controller方法间的映射。而且Controller不会直接依赖于HttpServletRequest和HttpServletResponse,他们可以通过Controller的方法参数灵活地获取到。2:@RequestParam用于在SpringMVC后台控制层获取参数,类似于request.getParameter(“name”),用于声明前端必须有的参数名。3:@ResponseBody:用于将Controller返回的对象通过HttpMessageConverter转换为Controller方法定义的返回值类型写入到Response对象的body数据区。这就是Sprin,优质的web层框架。

        至此,我对ssm框架的学习总结就结束了。现在我正在用框架进行期末项目开发,框架开发的便利性我也是深有体会。当然,即学即用,遇到的问题和困难也确实很多。其间,没少向老师提问,因为自己对框架原理的不了解,现在看来,有的问题是那么白痴-_-  但还好有个好脾气的教员。嘎嘎...但这就是学习道路上从小白到大神的必由之路嘛! 现阶段做项目都是遇到问题找百度,找文档...这就是技术不到家的表现,只有不断地学习,不断进阶才能有出头之日。

猜你喜欢

转载自blog.csdn.net/qq_25905159/article/details/86600395
今日推荐