SpringMVC学习笔记(一)——初步了解IOC,AOP,MVC和ORM

一直以来只专注于工作内容,由于工作经历的关系,一向对于框架不甚重视,认为框架反而束缚了自己的编码,近期由于被大连的某世界500强公司(既然是技术博文,这里不想无意义的黑,所以隐去名字)坑了一把,商定好的职位最后反而不发Offer,所以重新开始应聘,重新开始自我价值的评估.蓦然发现,自己的认识一直是存在问题的,存在即合理,目前各种形形色色的框架一直呈现一种向前发展的趋势,各种企业也在不停的倡导使用框架,所以框架的存在是一种行业需求,而作为一名行业的从业者,对于框架的理解也成了一种必备技能,所以本次选用目前较流行的SpringMVC框架来进行学习.

为什么要使用框架

首先要学习一项技术,个人的习惯是,要先搞清楚我们为什么要用它.这个是我挺长一段时间的疑惑,处于了解的浅显以及对于框架的不重视,对于框架的作用一直停留在提高开发效率和性能提升方面.
以下把我个人对于Web框架近期的理解拆成几个方面来说:

  • IOC AOP
    IOC(Inversion of Control)翻译过来是控制反转,何为控制反转?控制反转主要体现在Java对象构建的过程中,程序中正常创建对象的过程,我们称之为正向,反之,容器接管了对象创建的过程,并将创建结果反向注入到程序中,所以我们称之为控制反转.在这里我们提到了控制反转的一种类型–依赖注入(Dependency Injection).
    我们在开发Java程序的过程中,不可避免的要创建各种各样的对象,在常规的使用中,我们会使用new关键字来进行对象的初始化,然而在较大型的项目中,通常需要频繁的创建对象,这就使得这部分代码与对象产生了耦合,在对象产生变化时,我们可能将需要大量的修改相关代码,所以这种情况下,通常会使用设计模式中的工厂模式,而Spring提供了这种工厂模式的实现,降低了代码的耦合度,这里提到的是依赖注入中的”注入”.
    在日常开发中,我们经常会碰到这种场景,我们需要创建对象A,然而A的创建过程需要依赖对象B,所以我们不得不创建一个对象B,然而对象B的创建又依赖对象C,依此类推…作为对象A的使用者而非编写者,我们在没有详细了解对象A,B,C的代码或有详细的文档提供参考前,我们将很艰难的完成对于对象A的构建.而Spring提供了解决这种依赖的方式作为类的编写者,我们需要将类A,B,C之间的依赖关系在配置文件中提前配置好,这样在使用者使用的过程中,不需要考虑对象之间的依赖,只需要容器将这种相互依赖的对象注入给我们,这里主要提到的是依赖注入中的”依赖”.
    控制反转的另一种类型是依赖查找(Dependency Lookup),关于这部分,个人目前没有很好的了解,目前只是了解到Spring的注解是基于依赖查找实现的,后续如果有新一步的认识,我将补充这一部分内容.
    AOP(Aspect Oriented Programming)即”面向切面编程”,面向切面编程可以说是OOP(Object Oriented Programming,面向对象编程)的一种补充或扩展,OOP将纵向的公共行为以封装,继承,多态等概念来建立一个集合,而对OOP来说,横向的行为是无法建立集合的,横向分布在代码中的共同行为,如日志打印,共通的异常处理等,不仅增加了代码量,同时增加了系统的维护成本,而AOP的存在解决了这种问题.
    AOP的角度把代码划分成两类:核心关注点和横切关注点,核心关注点是代码具体的业务实现,而横切关注点就是前文提到的横向分布的共同行为.而Spring通过代理提供了这种方式的实现,开发者可以将精力投入到核心关注点的开发,横切关注点则可以通过代理的方式绑定到切面上.

  • MVC
    SpringMVC和Structs都可以用于开发出基于MVC(Model-View-Controller)设计模式的应用构架,MVC的优缺点大家都很了解,这里就不提太多.

  • ORM
    ORM(Object Relational Mapping,对象关系映射)应用在数据连接层,即MVC中的C(Controller).常用的产品有Hibernate,Mybatis等.
    ORM通过程序语言在程序中构建了数据库模型在代码中的映射,在程序操作数据库的过程中,可以借助映射来封装对数据库数据的存取等操作,使用ORM可以避免对于数据库数据封装的繁琐过程,同时也规避了这一过程出现问题的风险,且使用起来相对简单,可以一定程度的提升开发效率并降低问题产生率.
    以上是ORM框架的优点,但是ORM框架可能是个人使用过程中不适感最强烈的框架,所以仅从个人观点吐槽一下缺点.
    性能及内存消耗:由于本身通过映射实现,所以在性能及内存上的消耗肯定会大一些,如果在服务器上运行还好,在公司2G内存的开发机上…简直惨不忍睹.
    对某些数据库的支持不友好:这个具体细节记得不是很清楚,只记得当时用某个数据存取字段时一直不成功,后来才发现需要自行重写Hibernate的数据库方言来提供Java数据类型到数据库数据类型的映射.
    繁琐:这个不是指ORM框架的使用繁琐,而是在处理多表联结查询时,ORM的语法会比较复杂和繁琐.

今天先到这,明天正式开始SpringMVC的学习.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值