
SprignBoot集成了很多Spring中优秀的组件,比如①监控器,②AOP,③拦截器。
先简单的说一下各组件的含义和作用以及使用方法。
①监控器
监控器含义和作用:是Servlet中一种特殊的类,用于ServletContext、ServletRequest、HttpSession的创建、销毁过程中的增强处理,从而达到完成某一任务的监控的目的。比如网站资源缓存、站点在线人数统计、获取用户请求信息等等。
监控器的使用方法:对应的类都可以去实现对应的监控器接口和重写对应方法。比如:ServletContex监控器t实现ApplicationListener接口,重写onApplicationEvent();
ServletRequest监控器实现ServletRequestListener接口,重写requestInitialized()和requestDestroyed();
HttpSession监控器实现HttpSessionListener接口,重写sessionCreated()和sessionDestroyed()。
还有一种自定义的监控器,分三步:①需要一个监控类继承 ApplicationEvent类;②还需要一个监控的配置类,实现ApplicationListener接口,并重写onApplicationEvent(),将写好的监控类作为参数传递进来,进而对监控类进行一些相关的业务 *** 作;③最后写一个发布监控器的类,引用ApplicationContext对象利用publishEvent(()进行发布。
②AOP
AOP含义与作用:面向切面编程,分离关注点。各切面各司其职,灵活组合。拥有易配置、易插拔的程序结构。
AOP的使用方法:拥有两种常见的配置方法,一种j基于包的路径execution(“* com.example.demo.*.*(..)”),其中第一个*表示返回任意类型,注意后面有空格,第二个*表示指定路径下的任意包名,第三个*(..)表示该包下的所有方法;一种基于注解@annotation,作用到指定的注解上。
③拦截器
拦截器的含义与作用:拦截器又是AOP中一种特殊的类,作用在控制层,对用户请求的资源进行拦截和处理。
拦截器的使用方法:使用拦截器分两步,Step1定义拦截器:实现鼻祖接口HandInterceptor,重写preHandle()、postHandle()、afterCompletion();Step2配置拦截器:注意2.0之前和之后的版本,2.0之前继承WebMvcConfigurerAdaptor类,而2.0之后的版本继承WebMvcConfigurationSupport类,都要重写addInterceptor()。
在使用WebMvcConfigurationSupport需要注意的是默认拦截静态资源,想要不拦截静态资源还需要重写addResourceHandlers();也可以直接实现WebMvcConfigurer接口。由于他们之间的特性,所以我们可以根据前后端是否分离可以选择性使用。WebMvcConfigurationSupportt不访问前端静态资源,所以适用于前后端分离;而WebMvcConfigurer不拦截静态资源,前后端不分离可以用。
说完他们之间的定义,我们现在可以看看他们之间的执行顺序关系。
可以在IDEA里写一个Demo,分别使用以上的监控器、AOP、拦截器。源码太多太杂,就不一 一上传了。
通过启动项目,我们可以看出:
进而,我们可以推断出他们之间的执行顺序关系为:
监控器ServletRequest initnilized() > 拦截器preHandler() > AOP doBefore() >
AOP afterReturning() / afterThorwing() > AOP doAfter() > 拦截器postHandle() >
l拦截器afterCompletion() > 监控器ServletRequest destoryed()
一句话概括:程序先走监控器层的初始化方法;然后走拦截器的预前处理方法;然后执行完AOP切面;在返回到拦截器层处理后面的post方法和after方法;最后到监控器层处理最后的destoryed方法。
一张图让你看懂他们的层次关系:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)