美文网首页
SSM框架的补充

SSM框架的补充

作者: 千淘萬漉 | 来源:发表于2018-03-13 22:26 被阅读86次

    在前面的一篇关于框架中已经讲过了以下几点,另外再针对框架中的盲点进行扫雷,将现有的框架中的一些知识点进行强化。
    Spring中AOP主要用来做什么。
    Mybatis的mapper文件中#和$的区别。
    Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的,其内部是怎么实现的。

    1.Hibernate和Mybatis的区别。

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名。是一个半自动化的持久层框架。

    开发方面的区别:

    • hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发;
    • Mybatis 属于半自动化,sql需要手工完成(专注与Sql本身),稍微繁琐;

    但是,凡事都不是绝对的,如果对于庞大复杂的系统项目来说,发杂语句较多,选择hibernate 就不是一个好方案。

    sql优化方面:

    • Hibernate 自动生成sql,有些语句较为繁琐,会多消耗一些性能;
    • Mybatis 手动编写sql,可以避免不需要的查询,提高系统性能;

    对象管理比对:

    • Hibernate 是完整的对象-关系映射的框架,开发工程中,无需过多关注底层实现,只要去管理对象即可;
    • Mybatis 需要自行管理映射关系;

    缓存机制:

    • Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
    • MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

    Mybatis:小巧、方便、高效、简单、直接、半自动化。hibernate适用于需求变化不多的中小型项目,比如:后台管理系统,orm、oa......
    Hibernate:强大、方便、高效、复杂、间接、全自动化。mybatis适用于需求变化较多的项目,比如:互联网项目。

    【JAVA框架】Hibernate 与Mybatis 区别

    2.什么是IOC,什么是依赖注入。

    IoC -- Inversion of control, 控制反转。IoC意味着将你设计好的对象交给容器控制,是一种减少类与类之间依赖的设计原则.有了IoC容器后, 把创建对象和查找依赖对象的控制权交给了容器, 由容器进行注入组合对象, 所以对象与对象之间是松散耦合, 这样也方便测试, 利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活.

    DI -- Dependency Injection,依赖注入。即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中.

    同一个概念的不同角度的描述。控制反转(IoC)从 IoC容器的角度来说。依赖注入(DI) 从应用程序的角度来说

    Spring -- IOC/DI 基础概念

    3.Spring用了哪些设计模式。

    简单工厂,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建

    工厂模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。Spring中的FactoryBean就是典型的工厂方法模式。

    单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。Spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为Spring管理的是是任意的Java对象。

    代理模式,在Aop实现中用到了JDK的动态代理;

    观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

    策略模式,定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

    spring中的设计模式

    4.Spring注入bean的方式。

    Spring定义bean的三种方式和自动注入

    5.Spring中controller是单例还是多例,怎么修改。

    6.Spring事务隔离级别和传播性。

    spring事务传播性与隔离级别

    7.介绍下Mybatis的缓存机制。

    MyBatis 提供了查询缓存来缓存数据,以提高查询的性能。MyBatis 的缓存分为一级缓存和二级缓存。
    一级缓存是 SqlSession 级别的缓存
    二级缓存是 mapper 级别的缓存,多个 SqlSession 共享

    Mybatis缓存机制

    8.Spring MVC和Struts2的区别。

    1. 机制:
    spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。

    2. 性能:
    spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通 setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

    3. 参数传递:
    struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。

    4. 设计思想上:
    struts更加符合oop(面向对象编程)的编程思想, spring就比较谨慎,在servlet上扩展。

    5. intercepter的实现机制:
    struts有自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。

    6. spring3 mvc的验证,也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。

    Spring 依赖注入方式详解

    相关文章

      网友评论

          本文标题:SSM框架的补充

          本文链接:https://www.haomeiwen.com/subject/okuafftx.html