当前位置:   article > 正文

【Java面试题】spring+springMVC+mybatis原理及实现机制(持续更新)_spring,springmvc,mybatis的实现原理和机制

spring,springmvc,mybatis的实现原理和机制
               

本文将持续更新,主要讲解SSM框架的底层原理和实现机制等




1.什么是IOC?

IOC即Inverse of Control,它包括两个内容:控制与反转

那到底什么东西的“控制”被“反转”了呢?对于软件而言,即是某一个接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。

因为IOC确实不够开门见山,因此业界曾经进行了广泛的讨论,最终软件界的泰斗级人物Martin Fowler提出了DI(依赖注入:Dependency Injection)的概念用以代替IOC

即让调用类对某一个接口的依赖关系由第三方(容器或者协作类)注入,以移除调用类对某一个接口实现类的依赖。


2.什么是AOP?

AOP是Aspect Oritened Programming的简称,普遍翻译成 面向切面编程。

按照软件重构思想的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类中。

比如,Horse、Pig、Camel这些对象都有run、eat方法,通过引入一个包含这两个方法抽象的Animal父类,Horse、Pig、Camel就可以通过继承Animal复用run和eat方法。

通过引入父类消除多个类中重复代码的方式在大多情况下是可行的,但世界并非永远这么简单。

举个事务管理的栗子,看下面代码

Connection conn ;try{conn = DriverManager.getConnection();①获取数据连接conn.setAutoCommit(false); ②关闭自动提交的机制conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); ③设置事务隔离级别Statement stmt = conn.createStatement();int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " );rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+"WHERE user_id = 1");conn.commit();④提交事务}catch(Exception e){…conn.rollback();⑤提交事务}finally{…}
  • 1


在上面的代码中,真正的业务逻辑就只有

int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " );rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+"WHERE user_id = 1");
  • 1

其他的逻辑都可以称之为横切逻辑,这些横切逻辑依附在业务方法的流程中,我们无法将之转移到其他地方去。

AOP独辟蹊径通过横向抽取机制为这类无法通过纵向继承体系进行抽象的重复性代码提供了解决方案。

Spring AOP使用动态代理技术在运行期织入增强的代码。


3.Spring AOP使用了两种代理机制:一种是基于JDK的动态代理;另一种是基于CGLib的动态代理,请简述?

之所以需要两种代理机制,很大程度上市因为JDK本身只提供接口的代理,而不支持类的代理。

JDK动态代理:

JDK动态代理主要涉及到java.lang.reflect包中两个类:Proxy和InvocationHandler。
其中InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/67832
推荐阅读
相关标签
  

闽ICP备14008679号