Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring AOP的最佳实践

Spring AOP的最佳实践

作者头像
三哥
发布于 2018-06-15 07:09:55
发布于 2018-06-15 07:09:55
1.2K0
举报
文章被收录于专栏:java工会java工会

本文为《Spring揭秘》第11章的阅读笔记,该书对Spring的基本原理进行了深度剖析,是我目前看过的最好的Spring中文资料。

一、异常处理

1、Java异常处理

Java中的异常层次体系如下图所示:

我们通常将Java中的异常类型分为以下两种类型:

  • 通常将java.lang.Errorjava.lang.RuntimeException及其子类称之为unchecked exception。之所以这么称呼,是因为编译器不会对这些类型的异常进行编译期检查。因为一般关心不到java.lang.Error,狭义上来说,将java.lang.RuntimeException暂且称为unchecked exception也可以;
  • java.lang.Exception及其子类,并除去java.lang.RuntimeException分支,统称为checked exception。一旦在方法签名中声明了将会抛出“checked exception”,调用者就必须对这些异常进行处理。

抛开业界对checked exceptionunchecked exception的论战不谈,重点看着两类异常的应用场景:

  • unchecked exception:对应系统中的严重异常情况,这些情况应用程序一般无法恢复,比如数据库挂掉、网络连接中断、服务器崩溃等。所以,unchecked exception异常所提供的信息一般不是为应用程序准备的,而是为系统维护人员准备的。
  • checked exception:通常用于表明系统中的某些罕见的非正常状态。对于一个业务方法来说,使用错误码(Error Code)的时代是通过返回-1之类的数字表明一些非正常状态,并要求调用方对这些非正常状态进行处理,而编译器对checked exception的检查可以进一步加强这种契约关系;通常checked exception是可恢复的,也是意料之中的,它提供的信息是面向应用程序的。

技术文章Effective Java Exception中,作者将unchecked exception对应的情况称之为Fault,而将checked exception对应的情况称之为Contingency,而Fault Barrier要处理的就是unchecked exception。

2、Fault Barrier

对于unchecked exception来说,不管应用抛出何种类型的unchecked exception,最终都需要人进行干预,只要unchecked exception能够提供足够的信息,相应人员就可以进行处理。

当系统中有多个地方可能抛出unchecked exception的时候,在引入Fault Barrier概念之前,我们可能会在每个调用的最顶层,分别添加异常处理逻辑对其进行处理;不过,unchecked exception可做的事情很少,通常就是记录日志、通知相应人员。所以,这些相同的逻辑实现可以归并到一起进行统一处理,对于系统的Fault来说,它实际上就是一种横切关注点(cross-cutting concern)。

因此,我们完全可以实现一个对应Fault处理的Aspect,让其对系统中所有可能的Fault情况进行统一处理,这个Aspect就称之为Fault Barrier。基本的处理模式如下图所示:

对于Spring MVC框架,可以通过继承SimpleMappingExceptionResolver处理RuntimeException及其子类来构建fault barrier。通过覆写resolveException()方法,在使用默认方法路由请求到一个通用的错误页面之前,你可以添加自定义的异常处理;对于3.x之后的版本,可以直接使用@ExceptionHandler注解,完成全局异常处理功能。具体细节可以参考Spring MVC Exception Handling Example这篇文章。

二、安全检查

javax.servlet.Filter是Servlet规范为我们提供的一种AOP支持,通过它,我们可以为基于Servlet的Web应用添加对应的资源访问控制。基于Filter的Web应用的资源访问控制,仅仅是特定领域的安全检查需求,而通过AOP,我们可以为任何类型的应用添加安全支持。

安全检查属于系统的一种横切关注点,按照原先的方法进行系统开发,势必让这些安全检查逻辑散落到系统各处,处理安全检查的最好方法就是AOP。在Spring社区,已经有成熟的安全框架供开发者使用,那就是Spring Security。

Spring Security是一套框架,专注于为Java应用提供验证和授权功能。跟大多数Spring项目类似,Spring Security的威力在于它具备良好的可拓展性,用于满足各种定制的需求。Spring Security具备如下特性:

  • 针对验证(Authentication)和授权(Authentication)的全面和扩展支持;
  • 防止session fixation、点击劫持(clickjacking)和交叉站点请求伪装(cross site request forgery)等各种攻击;
  • 集成Servlet API;
  • 可以与Spring Web MVC集成

三、缓存

AOP应用的另一个主要业务场景是为系统透明地增加缓存支持。缓存可以在很大程度上提升系统的性能,但它不是业务需求,而是系统需求

为了避免需要添加的缓存实现逻辑影响业务逻辑的实现,我们可以让缓存的实现独立于业务对象的实现之外,将系统中的缓存需求通过AOP的Aspect封装。

官网上的这篇文章:Caching Data with Spring,讲述了Spring Boot中提供的对Cache操作的支持,非常简单!

作者:杜琪 链接:https://www.jianshu.com/p/fe611f09c070 來源:简书

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java工会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ZYNQ IgH EtherCAT主站方案来了!
创龙科技已基于IMX8、ZYNQ、AM5728、AM5708、AM437x、AM335x、T3/A40i等平台提供了开源EtherCAT主站IgH案例。本文主要演示TLZ7x-EasyEVM-S评估板基于IgH EtherCAT控制伺服电机方法。如需其他平台相关资料,请与我们联系。
创龙科技Tronlong
2021/10/28
3.2K0
ZYNQ IgH EtherCAT主站方案来了!
基于全志T507-H的Igh EtherCAT主站案例分享
下文主要介绍基于全志T507-H(硬件平台:创龙科技TLT507-EVM评估板)案例,按照创龙科技提供的案例用户手册进行操作得出测试结果。
阿志小管家
2024/06/04
2050
基于全志T507-H的Igh EtherCAT主站案例分享
基于AM335X开发板 ARM Cortex-A8——Acontis EtherCAT主站开发案例
本文档主要说明TL335x-EVM-S评估板基于德国Acontis公司EtherCAT主站协议栈控制伺服电机的方法,内容包含有EC-Master、EC-Engineer简介、EtherCAT主站开发案例测试、EtherCAT主站开发案例编译、EC-Engineer配置ENI文件方法等。
创龙科技Tronlong
2022/06/24
1.5K0
基于AM335X开发板 ARM Cortex-A8——Acontis EtherCAT主站开发案例
基于全志T507-H的Linux-RT + Igh EtherCAT主站案例分享
本文将为各位工程师演示全志T507-H工业评估板(TLT507-EVM)基于IgH EtherCAT控制伺服电机方法,生动说明Linux-RT + Igh EtherCAT的强大之处!
创龙科技Tronlong
2024/07/04
2570
基于全志T507-H的Linux-RT + Igh EtherCAT主站案例分享
ARM平台如何玩转GDB远程调试?
GDB工具是GNU项目调试器,基于命令行使用。和其他的调试器一样,可使用GDB工具单步运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等,它是UNIX/LINUX操作系统下强大的程序调试工具。GDB支持多种语言,包括Ada、汇编、C/C++、D、Fortran、GO、Objective-C、OpenCL、Modula-2、Pascal和Rust。
创龙科技Tronlong
2021/10/09
1.6K0
ARM平台如何玩转GDB远程调试?
嵌入式基础测试手册——基于NXP iMX6ULL开发板(4)
Windows开发环境:Windows 7 64bit、Windows 10 64bit
创龙科技Tronlong
2023/05/04
9710
嵌入式基础测试手册——基于NXP iMX6ULL开发板(4)
iMX6ULL开发板物联网模块开发案例,WIFI/NB-IoT/STA(上)
本文档主要介绍基于iMX6ULL开发板分享物联网模块开发案例,其中内容包括SDIO WIFI模块测试、STA模式测试、NB-IoT模块测试、Zigbee模块测试、LoRa模块测试和4G模块测试由于篇幅过长,案例分为上下两部分,欢迎各位感兴趣的用户查看更多。
创龙科技Tronlong
2022/09/12
1.7K0
iMX6ULL开发板物联网模块开发案例,WIFI/NB-IoT/STA(上)
基于AM335X开发板 (ARM Cortex-A8)——Linux系统使用手册 (中)
本篇文章主要讲解嵌入式板卡中Linux系统是如何正确测试、使用的,其中内容包含有U-Boot编译、U-Boot命令和环境变量说明、Linux内核编译、xtra驱动编译、系统信息查询、程序开机自启动说明、NFS使用说明、TFTP使用说明、TFTP + NFS的系统启动测试说明、inux设备驱动说明等,其中案例源码部分公开。
创龙科技Tronlong
2022/06/24
1.3K0
基于AM335X开发板 (ARM Cortex-A8)——Linux系统使用手册 (中)
基于AM335X开发板 (ARM Cortex-A8)——Linux系统使用手册 (下)
本篇文章主要讲解嵌入式板卡中Linux系统是如何正确测试、使用的,其中内容包含有U-Boot编译、U-Boot命令和环境变量说明、Linux内核编译、xtra驱动编译、系统信息查询、程序开机自启动说明、NFS使用说明、TFTP使用说明、TFTP + NFS的系统启动测试说明、inux设备驱动说明等,其中案例源码部分公开。
创龙科技Tronlong
2022/06/24
1.5K0
基于AM335X开发板 (ARM Cortex-A8)——Linux系统使用手册 (下)
电力行业必看!国产评估板-全志科技T3,开箱测评!
​本期我们来开箱测评创龙科技(Tronlong)的首款国产ARM评估板——TLT3-EVM评估板,它基于全志科技T3处理器设计,究竟性能如何?下面,我们一起看看详情!
创龙科技Tronlong
2022/03/28
1.4K0
电力行业必看!国产评估板-全志科技T3,开箱测评!
基于NXP i.MX 6ULL核心板的物联网模块开发案例(1)
本文主要介绍基于创龙科技TLIMX6U-EVM评估板的物联网模块开发案例,适用开发环境:
创龙科技Tronlong
2024/07/30
1390
基于NXP i.MX 6ULL核心板的物联网模块开发案例(1)
基于NXP i.MX 6ULL核心板的物联网模块开发案例(4)
本文主要介绍基于创龙科技TLIMX6U-EVM评估板的物联网模块开发案例,适用开发环境:
创龙科技Tronlong
2024/07/30
1270
基于NXP i.MX 6ULL核心板的物联网模块开发案例(4)
全志T3开发板——嵌入式入门学习测试教程(6)
本文主要为嵌入式入门开发者的接口、网口等板卡基础快速测试,当初级学习的开发者拿到板卡,如何在最快时间内测试板卡正常?,继续测试教程(5)的看门狗测试、网络接口(RGMII ETH、RGMII ETH)、AUDIO音频、CVBS OUT接口、TVIN接口测试部分,接下来是蓝牙、WIFI模块、SDIO WIFI、4G模块、USB转网口模块等测试部分是否正常。
创龙科技Tronlong
2022/03/31
11.8K0
全志T3开发板——嵌入式入门学习测试教程(6)
嵌入式工业开发板基础测试手册——基于NXP iMX6ULL开发板(1)
Windows开发环境:Windows 7 64bit、Windows 10 64bit
创龙科技Tronlong
2023/05/04
1.2K0
嵌入式工业开发板基础测试手册——基于NXP iMX6ULL开发板(1)
iMX6ULL开发板物联网模块开发,Zigbee/LoRa/4G模块测试(下)
本文档主要介绍基于iMX6ULL开发板分享物联网模块开发案例,其中内容包括SDIO WIFI模块测试、STA模式测试、NB-IoT模块测试、Zigbee模块测试、LoRa模块测试和4G模块测试由于篇幅过长,案例分为上下两部分,欢迎各位感兴趣的用户查看更多。
创龙科技Tronlong
2022/09/12
1.4K0
iMX6ULL开发板物联网模块开发,Zigbee/LoRa/4G模块测试(下)
米尔Remi Pi 实时系统与EtherCAT移植
Remi Pi采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、SD卡、MIPI-CSI等外设接口,在工业、医疗、电力等行业都得到广泛的应用。
用户10591265
2024/04/30
1460
全志科技T3开发板(4核ARM Cortex-A7)——MQTT通信协议案例
本文主要介绍基于T3处理器的MQTT通信协议开发案例,讲解内容主要包括了MQTT通信协议简介、概述、应用场景以及Mosquitto工具安装、mqtt_client案例和mqtt_sinewave_pub案例等。
创龙科技Tronlong
2022/06/07
1.6K0
全志科技T3开发板(4核ARM Cortex-A7)——MQTT通信协议案例
全志T3开发板——嵌入式入门学习测试教程(7)
本文主要为嵌入式入门开发者的接口、网口等板卡基础快速测试,当初级学习的开发者拿到板卡,如何在最快时间内测试板卡正常?,继续测试教程(5)的看门狗测试、网络接口(RGMII ETH、RGMII ETH)、AUDIO音频、CVBS OUT接口、TVIN接口测试部分,接下来是蓝牙、WIFI模块、SDIO WIFI、4G模块、USB转网口模块等测试部分是否正常。
创龙科技Tronlong
2022/03/31
8.4K0
全志T3开发板——嵌入式入门学习测试教程(7)
TI Sitara系列 AM64x开发板——PCIe 5G通信测试手册
本文主要基于我司TL64x-EVM评估板 + 移远RM500Q 5G模块,验证PCIe 5G网络通信功能。本文档适用开发环境:
创龙科技Tronlong
2022/11/26
1.5K0
TI Sitara系列 AM64x开发板——PCIe 5G通信测试手册
全志科技T3开发板(4核ARM Cortex-A7)——视频开发案例
本文主要介绍基于全志科技T3国产平台的视频开发案例,内容包含了gige_capture案例、案例、GigE工业相机配置、图像采集并显示、图像采集以及案例编译保存、关键代码等。
创龙科技Tronlong
2022/06/07
8290
全志科技T3开发板(4核ARM Cortex-A7)——视频开发案例
推荐阅读
相关推荐
ZYNQ IgH EtherCAT主站方案来了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档