Spring AOP入门——概念和注意事项
AOP什么?
AOP在功能方面,它是之前和之后运行一些业务逻辑,一些操作(比方记录日志、或者是推断是否有权限等),这些操作的加入。全然不耦合于原来的业务逻辑。从而对原有业务逻辑全然是透明。
也就是说。这段操作和业务逻辑是全然分开的,它可能在项目中须要横切多个模块。且其自身也是一个独立的模块,贯穿了整个项目。我们全然能够依据须要启用或者停用这个功能。 AOP的典型应用就是事务管理和日志。
AOP中的概念
以下这些术语并非Spring定义的。因为AOP中的术语不是那么形象,所以假设Spring再自定义一套的话那么会使得这些概念更加混淆。
a) 切面(Aspect):一个横切关注点的模块化。在企业级JAVA应用中,事务管理是一个关于横切关注点的典型样例。在Spring AOP中,切面能够用常规类(基于shcema)或者用常规类并加上注解来实现(基于@AspectJ)。
b) 通知(Advice):由切面在特定的连接点运行的动作称为通知。不同类型的通知包含,前置通知、围绕通知、后置通知等。
很多AOP框架,包含Spring,把通知模拟成一个拦截器。围绕着连接点维护一个拦截器链。
c) 连接点(JoinPoint):程序运行过程中的一个点,比方说运行方法或者是处理异常。在Spring Aop中。一个连接点总是代表一个方法的运行。
d) 目标对象(Target Object):也就是须要被通知的对象。所以也叫被通知对象(advised object)。因为Spring AOP是用执行时代理来实现的,所以这个对象总是个被代理的对象。
e) AOP代理(AOP proxy):AOP框架创建用来实现实现AOP功能的。在Spring框架中,AOP代理能够基于JDK动态代理,也能够是基于CGLIB的代理。
f) 织入(Weaving):把切面和其他应用类型或者对象来创建一个目标对象。
能够在编译期(比方使用 AspectJ编译器),装载阶段或者是执行时完毕。正如别的纯Java的AOP框架一样,Spring AOP在执行时实现织入。
通知类型
a) 前置通知(Before advice):在连接点之前运行,可是无法阻止连接点的运行(除非当中抛出异常)
b) 后置返回通知(After returning advice):在连接点正常运行完毕后运行,比方一个方法正常返回且没有抛出异常
c) 后置异常通知(After throwing advice):在被通知方法抛出异常后运行
d) 后置通知(After (final) advice):仅仅要连接点运行那就一定会运行,无论是抛出异常还是正常返回
e) 围绕通知(Around advice):这是最强大的通知,它能够实现前置通知和后置通知,而且它还能够来控制①是否运行连接点②返回值③抛异常
围绕通知是最常见的一种通知。Spring AOP像AspectJ一样提供了全范围的通知类型,所以官方文档给出的建议是使用“最弱小”的通知来实现我们的需求,为什么呢?你懂的,杀鸡焉用牛刀。且复杂的东西easy出错。比方,假设你仅仅须要用法的返回值更新一下缓存,尽管围绕通知也能够满足这一要求,但使用一个后置返回通知将要比使用一个围绕通知要好。使用最合适的通知类型会让你的编程模型变的简单,从而避免一些潜在的错误。
比方,你不须要去调用ProceedingJoinPoint的proceed()方法,因此你不会由于调用它而出错。
连接点的概念和切入点一样,都是AOP的核心。
它们让AOP差别于更老的一些仅仅提供拦截器的技术。
切入点能把通知指向到目标,而不必局限于OOP的结构。比方,围绕通知能够对那些横跨多个对象的方法(比方服务层的全部业务方法)提供事务管理。
须要注意的地方
1、若存在around,且around未proceed目标方法。那么after则不会被触发
2、若存在around,且proceed目标方法抛出异常。那么proceed之后的语句就不会运行到,而是直接到after or after returing
3、若存在around,且around正常运行。那么around方法的返回值。也就是在after-returning中可以获得的返回值
4、若不存在around,那么after-returning可以获得的返回值就是目标方法运行后的返回值
5、around就算不给返回值,也不会妨碍目标方法的调用,并不像网上说的那样会导致目标方法停止调用并返回null
6、事务是与线程绑定的,如果在该方法中打开一个新的线程,所以很自然独立于先前的交易
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Spring AOP入门——概念和注意事项的更多相关文章
- Spring入门篇——第5章 Spring AOP基本概念
第5章 Spring AOP基本概念 本章介绍Spring中AOP的基本概念和应用. 5-1 AOP基本概念及特点 5-2 配置切面aspect ref:引用另外一个Bean 5-3 配置切入点Poi ...
- Spring AOP基本概念
Spring AOP基本概念 目录 Spring AOP定义 AOP基本术语 通知类型 AOP定义 AOP基本术语 切面( Aspect ):一个能横切多个对象的模块化的关注点.对Spring AOP ...
- Spring Aop重要概念介绍及应用实例结合分析
转自:http://bbs.csdn.net/topics/390811099 此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没有遇到过与之相关的问题.最近项目中遇到了以下几点需求,仔细 ...
- Spring AOP 入门实例详解
目录 AOP概念 AOP核心概念 Spring对AOP的支持 基于Spring的AOP简单实现 基于Spring的AOP使用其他细节 AOP概念 AOP(Aspect Oriented Program ...
- Spring AOP基础概念及自定义注解式AOP初体验
对AOP的理解开始是抽象的,看到切点的匹配方式其实与正则表达式性质大致一样就基本了解AOP是基本是个什么作用了.只是整个概念更抽象,需要具化理解.下图列表是AOP相关概念解释,可能也比较抽象^_^ 比 ...
- Spring学习总结(1)——Spring AOP的概念理解
1.我所知道的aop 初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等.一下子让你不知所措,心想着:怪不得 很多人都和我说aop多难多难 .当我看进去 ...
- 基于注解的Spring AOP入门、增强Advice实例
这篇文章简单通过一个例子,介绍几种增强的基本配置,以方便spring框架初学者对aop的代码结构有个清楚的了解认识.首先,spring支持aop编程,支持aspectJ的语法格式来表示切入点,切面,增 ...
- Spring Boot 入门概念介绍
使用spring-boot快速开发spring应用 转 http://itindex.net/detail/49108-spring-boot-%E5%BC%80%E5%8F%91 spring多年以 ...
- spring AOP的概念和使用
指路:http://www.cnblogs.com/liujiayun/p/5912628.html AOP的来源:OOP在一些重复代码的使用中,代码冗余比较多,利用AOP可以改善. 通过编写切面和切 ...
随机推荐
- 【翻译】Why JavaScript Is and Will Continue to Be the First Choice of Programmers
花费2半小时,那么最终会被翻译.假设有问题,请提出,毕竟,自己的6不超过级别. 附加链接 Why JavaScript Is and Will Continue to Be the First Cho ...
- Windows Phone开发(30):图形
原文:Windows Phone开发(30):图形 图形如矩形.椭圆.路径等都从Shape类派生,它们一般表示规则或不规则图形,这些图形都是简单的二维图形,我相信大家都能理解的. 例一:矩形. 请看下 ...
- 【原创】poj ----- 3009 curling 2 解题报告
题目地址: http://poj.org/problem?id=3009 题目内容: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Tot ...
- uva 11396Claw Decomposotion(二分图判定)
题目大意:给出一个简单无向图,每一个点的度为3.推断是否能将此图分解成若干爪的形式.使得每条边都仅仅出如今唯一的爪中. (点能够多次出如今爪中) 这道题实质上就是问这个图是否为二分图,dfs判定 ...
- strcpy_s与strcpy对照
strcpy_s和strcpy()函数功能几乎相同.strcpy函数.就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串.在程序执行时,这将导致不可 ...
- 线性表实现简单vector
实现一个简单的vector Vector基于数组实现,可以复制并且其占用的内存可以自动回收(通过析构函数),可以调整Vector的大小,以及容量(容量的改变是通过为基本数组分配一个新的内存块,然后复制 ...
- how to fix the cwm/miui recovery status 2 error
Frequent issues: --------------------- If you report an issue without a log and/or without details, ...
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算(转)
Java 系统性能分析 命令 1. cpu分析 top , pidstat(sysstat) pid -p PID -t 1 10 vmstat 1 CPU上下文切换.运行队列.利用率 ps Hh - ...
- poj 2288 Islands and Bridges
题意: 给你一个双向连通图,求 获得权值最大 的 哈密顿通路的 权值 和 这个权值对应的数目: 其中权值计算方法是 列如 ABCD 权值是a+b+c+d+ab+bc+cd 如果 A,B,C 和B ...
- 【课程分享】基于plusgantt的项目管理系统实战开发(Spring3+JDBC+RMI的架构、自己定义工作流)
基于plusgantt的项目管理系统实战开发(Spring3+JDBC+RMI的架构.自己定义工作流) 课程讲师:张弘 课程分类:Java 适合人群:中级 课时数量:37课时 用到技术:Spring ...