前言:对于我们java程序员而言,在面试的过程中,无疑不会被问到有关SSH与SSM的问题,所以我就在这里提炼了一下我对它们的认识,以作后续参考,有什么写的不对的地方,还请指正与谅解。
从大体方面回答:
SSH | SSM | |
---|---|---|
指向技术 | Struts+Spring+hibernate | Spring+SpringMVC+MyBatis |
所以只需回答面试官Struts和SpringMVC的区别以及Hibernate和Mybatis的区别
1、Struts2与SpringMVC
Struts2 | SpringMVC | |
---|---|---|
核心处理器(入口) | Filter | Servlet |
基于类,每次发一次请求都会实例一个Action | 基于方法设计 | |
开发效率 | 开发效率SpringMVC比Struts2高 | 支持JSR303,处理ajax请求更加方便 |
页面的开发效率 | OGNL表达式使页面的开发效率更高些 | 页面开发效率相对低些 |
2、Hibernate与Mybatis
Hibernate | Mybatis | |
---|---|---|
开发效率 | sql语句已经被封装,直接可以使用,加快系统开发 | 属于半自动化,sql需要手工完成,稍微繁琐 |
SQL优化 | 自动生成SQL,有些语句较为繁琐,会多消耗一些性能 | 手动编写SQL,可以避免不需要的查询,提高系统性能 |
对象管理 | 完整的ORM框架,开发过程中,无需过多关注底层实现,只需要管理对象即可 | 需要自行管理映射关系 |
3、Spring
1)什么是Spring?及其优点?
-
spring是一个轻量级的IOC与AOP容器框架
-
对主流框架有很好的集成支持,如Hibernate、SpringMVC等框架
-
低侵入式的,基于Spring开发一般不依赖于它的类。
-
Spring是个容器,因为它包含并且管理应用对象的生命周期和配置,比如对象的创建、销毁、回调等
-
对事务的管理
2)讲一讲你对AOP和IOC的理解?
IOC:控制反转(Inversion of Control,简称:IOC),原本应该由我们new对象的这个操作转移到Spring容器中执行
eg:
在一个项目中,如果有100个人请求同一个方法,这个方法会被调用100次,那类中new的变量也会被创建100次,这是相当耗费资源的;而IOC底层对这种对象的创建使用的是单例模式,这样就避免了前面所说的资源损耗。
AOP:面向切面编程(Aspect Oriented Programming,简称:AOP),讲到AOP就必须先提及以下OOP,OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能
,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
eg:
项目中体现:事务 日志
操作数据库的增删改之前,都需要开启事务,增删改之后,都需要提交事务,这样我们就可以写一个拦截器,底层就是采用动态代理实现前置通知和后置通知,在前置通知中开启事务,在后置通知中提交事务,在spring.xml中配置通知即可,spring的事务管理底层就用到了AOP
3)Spring的注入方式有哪些?
set注入:
为需要控制反转的变量提供set方法,在spring配置文件中使用<property>标签配置
构造注入:
为需要控制反转的变量提供构造函数,在spring配置文件中使用<constructor-arg>标签配置
接口注入:
具有侵略性,必须要继承才能用。