面试题总结05

"本文深入探讨了Spring的面向切面编程(AOP),解释了AOP的概念、通知类型和编织原理。接着,详细阐述了SpringMVC的工作流程,展示了其在处理Web请求中的作用。此外,介绍了Mybatis的基本概念、优点以及如何进行分页操作,同时对比了#{}
摘要由CSDN通过智能技术生成

1.AOP概念

面向切面编程
将业务逻辑中的横切关注点(与核心业务无关的,多处业务中通用的逻辑)分离出来,在指定位置执行的过程
连接点
程序执行过程中的一个点,例如方法的调用
切入点
选择一个或多个连接点的表达式又称切点表达式
通知 Advice @Before @After@AfterReturning@AfterThrowing@Around(环绕)-常用
在已经选择的每个连接点执行的代码也就是所谓的横切关注的业务逻辑
切面
一个囊括了切入点和Advice的模块(一个切面的配置类)
编织(可以由第三方框架,例如Spring)
将切面与主要代码结合的技术

2.SpringAOP底层原理

aop底层是采用动态代理机制实现的∶接口+实现类
如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy去创建代理对象
没有实现接口的对象,就无法使用DK Proxy去进行代理了,这个时候SpringAOP会使用CGLib生成一个被代理对象的子类来作为代理,就是有代理创建一个和impl实现类平级的一个对象,但是这个对象不是一个真正的对象,只是一个代理对象,但是可以实现跟impl相同的功能,这个就是aop的横向机制原理,不需要修改源码

3.SpringMVC

Spring Web MVC框架提供 模型-视图-控制器
对应用程序的不同方面 逻辑 业务 视图 提供松散耦合

1.描述一下SpringMVC工作流程

用户发起请求到前端控制器(DispatherServlet)
由前端控制器调用映射处理器(HandlerMapping)获取请求对应的方法信息
再由前端控制器调用对应控制器(Controller)返回模型和视图对象(MoudleAndView)
然后由前端控制器调用视图解析器(ViewResolver)结合Model和View来渲染视图,
最后将渲染结果返回给客户端

4.Mybatis

1.什么是Mybatis

Mybatis内部封装了JDBC,开发时值需要关注SQL语句本身,不需要花费精力去处理加载驱动,创建连接,创建statement等复杂的过程,程序员直接编写原生SQL,可以严格控制sql执行性能,灵活度好

2.Mybatis优点
  1. 基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成影响
  2. SQL卸载XML文件内,接触SQL与程序代码之间的耦合,方便统一管理
  3. 提供XML标签,支持动态SQL语句,并可重用
  4. 与DBC相比,减少了50%的代码量消除了JDBC大量冗余的代码,不需要手动开关连接
  5. 很好的与各种数据库兼容(只要DBC支持的Mybtis都支持)
  6. 能够很好的与Spring集成

缺点∶SQL语句的编写工作量较大,尤其是字段多,关联表多时,对开发人员编写SQL语句的功底有一定要强
SQL语句依赖于数据库,即使更换方便,也需要重新书写大量SQL
适用情况∶Mybatis专注于SQL本身,是一个足够灵活的DAO层解决方案
对性能的要求很高,或者需求变化比较多的项目,比如互联网项目,Mybatis将是不错的选择

JDBC 大量冗余 sql写在代码里换数据库每个类都的改
Hibernate 去除了大量冗余 不用写sql 关键字段 方便sql满足不了所有要求 复杂查询 做不了
Spring JDBC 封装了冗余 手写SQL写在代码 耦合度太高
Mybtis 大量冗余 手写sql 集中在XML配置中写

5.#{}和${}区别

#{}是预编译处理,${}是字符串替换
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值Mybatis在处理${}时,就是把${}仍替换成变量的值,使用#{}可以有效防止SQL注入,提高系统安全性

补充
PreparedStatement和Statement区别

  1. PreparedStatement是Statement子类
  2. PreparedStatement有预编译的功能会参数以?的形式传入,避免注入攻击
  3. PrepatedStatement在数据库会自动进行类型转换

6.Mybatis是如何进行过分页的

Mybatis使用RowBounds对象进行分页,他是针对ResultSet结果集执行的内存分页而非物理分页
可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页

补充
分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内执行的sql
然后重写sql,根据dialect方言,添加你对应的物理分页语句和物理分页参数

7.Mybatis动态sql有什么用,执行原理,有哪些动态SQL

Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql
执行原理是根据表达式的值,完成逻辑判断动态拼接sq功能
Mybatis提供9种动态sql标签∶trim|where|set|foreach|if|choose|when|otherwise|bind

8.Spring自动配置

在主启动类中有@SpringBootApplication这个注解
此注解的元注解中包含@SpringBootConfiguration 标明这是一个配置类
还包含@ComponentScan用扫描当前包下的所有组件
最后还有一个@EnableAutoConfiguration找到META-INF/spring.factories里面所有预写好的配置类进行加载
在所有的配置类里面都有条件注解@Conditional来判断是否创建它认为你需要的bean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值