Spring知识篇4:Spring MVC、Spring AOP

1. Spring MVC原理

在这里插入图片描述

  • 流程说明:
    (1)客户端发送请求,直接请求到DispaterServlet(前端控制器)。 音标为 /dɪˈspætʃə®/ /ˈsɜːvlɪt/
    (2)DispatcherServlet根据请求信息调用HandlerMapping(处理器映射器),解析请求对应的Handler。
    (3)解析到对应的Handler(也就是平时所说的Controller控制器)后,开始由HandlerAdapter适配器处理。
    (4)HandlerAdapter会根据Handler来调用真正的处理器开始处理请求,并处理相应的业务逻辑。
    (5)处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。
    (6)ViewResolver(视图解析器)会根据逻辑View查找实际的View。
    (7)DispaterServlet会把返回的Model传给View(视图渲染)。
    (8)把View返回给请求者。

2. Spring 框架中用到了哪些设计模式?

(1)工厂设计模式:Spring使用工厂模式通过BeanFactory、ApplicationContext 创建 bean 对象。
(2)代理设计模式:Spring AOP功能的实现。
(3)单例设计模式:Spring中默认的Bean类型都是单例的。
(4)模板设计模式: Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
(5)包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问时根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
(6)观察者模式:Spring 事件驱动模型就是观察者模式很经典的一个应用。
(7)适配器模式:Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

3. Spring管理事务的方式有几种?

  • 编程式事务,在代码中硬编码(不推荐使用)。
  • 声明式事务,在配置文件中配置(推荐使用)。
    声明式事务又可以分为两种:
    (1)基于XML的声明式事务
    (2)基于注解的声明式事务

4. Spring AOP:面向切面编程

  • 一般的程序执行流程是从Controller层调用service层、然后service层调用DAO层访问数据,最后在逐层返回结果。但是在一个系统中往往有多个不同的服务,例如用户服务、商品信息服务等等,每个服务的Controller层都需要验证参数,都需要处理异常,对不同的服务的纵向处理流程进行横切,在每个切面上完成通用的功能,例如身份认证、验证参数、处理异常等等,这样就不用在每个服务中都写相同的逻辑了,这就是AOP思想解决的问题。
    AOP以功能进行划分,对服务顺序执行流程中的不同位置进行横切,完成各服务共同需要实现的功能;能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

  • Spring AOP 基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理,如下图所示:
    在这里插入图片描述
    当然你也可以使用 AspectJ ,Spring AOP 已经集成了AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。

  • 为了更好地理解 AOP,就需要对 AOP 的相关术语有一些了解,这些专业术语主要包含 Joinpoint、Pointcut、Advice、Target、Weaving、Proxy 和 Aspect,它们的含义如下表所示。
    在这里插入图片描述

4.1 Spring AOP 和 AspectJ AOP 有什么区别?

Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。

Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,

如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比Spring AOP 快很多。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值