Java学习杂谈(十)--Spring

createh52个月前 (01-14)技术教程26

1.Spring MVC

关于IoC和AOP我在上篇已经稍微解释过了,这里先通过Spring的MVC框架来给大家探讨一下Spring的特点吧。(毕竟大部分人已经很熟悉Struts了,对比一下吧)

众所周知MVC的核心是控制器。类似Struts中的ActionServlet,Spring里面前端控制器叫做DispatcherServlet。里面充当Action的组件叫做Controller,返回的视图层对象叫做ModelAndView,提交和返回都可能要经过过滤的组件叫做Interceptor。

让我们看看一个从请求到返回的流程吧:

(1) 前台Jsp或Html通过点击submit,将数据装入了request域

(2) 请求被Interceptor拦截下来,执行preHandler()方法出前置判断

(3) 请求到达DispathcerServlet

(4) DispathcerServlet通过Handler Mapping来决定每个reuqest应该转发给哪个后端控制器Controller

(5) 各式各样的后端控制器Controller来处理请求,调用业务层对象来处理业务逻辑,然后返回一个ModelAndView对象

(6) 当Controller执行完毕,Interceptor会调用postHandle来做后置处理

(7) ModelAndView代表了呈现画面是使用的Model数据对象和View对象,由于只能返回一个对象所有起了这个名字封装这两个对象。

(8) 由ViewResolver对象来解析每个返回的ModelAndView对象应该呈现到哪一个视图(Jsp/Html等)中(包括Exception Resolver)

(9) 当View绘制完成之后Interceptor又会跳出来执行它的afterCompletion方法做善后处理。当然Interceptor的行为完全是配置的而不是强制的。

这样一个完整的流程就这样结束了,个人感觉Spring的MVC框架稍显复杂,不像Struts-1那么容易上手。不管是Controller、Model、ViewRosovler、Handle Mapping还是View,Spring MVC框架都已经为你提供了多种实现,想最大程度的减少程序员的编码,增加框架的适用性。大家有兴趣可以继续深入研究哈!

2.Spring AOP

记得最初我请教他人Spring是一个什么东西的时候,每个人都会提到AOP这个词语。我在上一篇已经解释过AOP基本原理,这次来跟大家说说Spring的AOP编程吧。不同的AOP框架会有其对AOP概念不同的实现方式,主要的差别在于所提供的Pointcut、Aspects的丰富程度,以及它们如何被织入应用程序、代理的方式等等。先熟悉一下AOP中的几个重要概念:

(1) Cross-cutting:横切,说白了就是需要统一处理的集合

(2) Aspects:将散落各处的横切收集起来,设计成各个独立可重用的对象称为Aspects。

(3) Advice: 对横切的具体实现,即等待插入一段逻辑。

(4) Joinpoint:Advice插入流程的时机点。

(5) Pointcut: 用于选择Joinpoint的程序结构,可以通过Annotation或者XML实现。

(6) Weave: Advice被应用至对象之上的过程称之为织入,有编译期、类加载期、运行期三种时间点策略。

如果你采用实现接口的方式,Spring会在执行时期适用java的动态代理,如果不实现接口,Spring会使用CGLIB产生代理类。AOP的概念很大很泛,而Spring只使用了其中的部分特性,毕竟Spring的目标是轻量级框架,比如它只支持对Method的Joinpoint,而不支持对Field的Joinpoint,理由是为了封装性。

其实我们可以把概念看得简单一点,AOP的目的是减少冗余代码,增强对较大项目的全局监控。Spring利用AOP可以规定一个集合和一套规则,在这个集合里所有的方法被invoke即调用的时候,都必须按照那套规则走一遍。那么首先对其中10个方法都要用到的处理代码就只用写一遍,如果是这10个方法来了就织入这段代码;其次,按照规则,也许所有的牵扯某个模块的方法调用的时候,我都需要做日志或者进行验证,那么我只要立足于这个集合的入口和出口,管他从哪里来去哪里,都能被有效的监控。我监控的可能不止是某个方法单独的行为,我还可以加入对流程控制的监控规则。例如是论坛,我规定注册了才能登录,而登录后才能发帖回帖下资源,于是所有这类流程都会被收集到我眼皮地下通过。

想要了解更多Java知识那就来关注我们吧! 精彩内容多多哦!不从错过哦!

多多关注

相关文章

面试官:来,讲讲Spring事务有哪些坑?

引言今天,我们接上文《面试官:谈谈你对mysql事务的认识》的内容,来讲spring中和事务有关的考题!因为事务这块,面试的出现几率很高。而大家工作中CRUD的比较多,没有好好总结过这块的知识,因此面...

Java面试:应聘Java开发工程师的基本要求是什么?

根据技术水平不同,Java程序员可以分为初级、中级、高级、资深等。不同级别的Java程序员,企业的要求也是有区别。下面整理了初级Java程序员和中级Java程序员的应聘要求,供大家参考:(具体要求结合...

一文读懂:SpringAI - Java 开发的AI智能新利器

使用Spring AI集成国产大模型 到 Java项目指南本文旨在快速介绍如何通过Spring AI让Java项目接入大模型,从而为你的业务增添AI能力。我们将引导您完成从环境准备到代码实现的全过程。...