在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成(AOP)所要解决的

要了解什么是AOP,首先应该了解AOP相关术语,只有完全理解这些,才能更好的掌握AOP

描述切面的常用术语有 通知(advice), 切点(pointcut), 连接点(join point).

通知(advice)

切面有目标-他必须要完成的工作,成为通知.通知定义了切面是什么以及何时使用.

Spring切面可以应用5种类型的通知

  • Before                在方法被调用之前调用通知
  • After                  在方法完成之后调用通知,无论方法执行是否成功
  • After-returning    在方法成功执行之后调用通知
  • After-throwing     在方法抛出异常后调用通知
  • Around                通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为

连接点(join point)

连接点是在应用执行过程中能够插入切面的一个点.这个点可以是调用方法时,抛出异常时,甚至修改一个字段时.切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为

切点(pointcut)

切点的定义会匹配通知所要织入的一个或多个连接点

切面(Aspect)

切面是通知和切点的结合,通知和切点共同定义了关于切面的全部内容-它是什么,在何时和何处完成其功能

Spring提供了4种各具特色的AOP支持

  • 基于代理的经典AOP
  • @AspectJ注解驱动的切面
  • 纯POJO切面
  • 注入式AspectJ切面(适合Spring各个版本)

以下介绍如何使用注解,在Spring使用AOP

在XML文件中添加如下代码

?
1
< aop:aspectj-autoproxy >

现在开始就可以使用@AspectJ注解来开启AOP,有意思的是,虽然我们使用@AspectJ注解作为指引来创建基于代理的切面,但本质上它仍然是一个Spring风格的切面.

以下代码创建一个POJO使其成为切面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Aspect
public class LogAOP {
     //sevice包及其子包所有类的所有方法
     @Pointcut ( "execution(* com.kenshiro.service..*.*(..))" )
     public void log(){}
     @Before ( "log()" )
     public void beforeLog(){
         System.out.println( "方法前执行" );
     }
     @AfterReturning ( "log()" )
     public void AfterLog(){
         System.out.println( "方法成功返回执行" );
     }
     @Around ( "log()" )
     public void AroundLog(ProceedingJoinPoint joinpoint){
         System.out.println( "方法之前执行" );
         joinpoint.proceed();  //执行业务代码
         System.out.println( "方法之后执行" );
     }
}

就是这么简单,一个简单的POJO加上一个@Aspect ,定义一个或者多个切点(pointcut).N个通知方法(advice).

切点配合通知便是切面,切面便是AOP(在什么位置,什么时候,做什么)

更详细的AOP语法以及使用标准:http://blog.csdn.net/nthack5730/article/details/45604031

Spring AOP切面相关推荐

  1. Spring AOP切面的时候参数的传递

    Spring AOP切面的时候参数的传递 Xml: <?xml version="1.0" encoding="UTF-8"?> <beans ...

  2. spring aop 切面添加日志

    这是一个非常简单的spring aop切面添加日志的程序,下面来看一下这个程序 1.程序使用jar包 2.切面类LoggingAspect.java package com.cailei.aop.as ...

  3. Spring AOP 切面@Around注解的具体使用

    @Around注解可以用来在调用一个具体方法前和调用后来完成一些具体的任务. 比如我们想在执行controller中方法前打印出请求参数,并在方法执行结束后来打印出响应值,这个时候,我们就可以借助于@ ...

  4. 【经典】Spring aop切面实现异步添加日志—完整版

    系统开发中我们常遇到要处理系统日志等信息的,在此我分享一篇 利用spring aop切面来异步添加日志的操作,其中用到了 队列和多线程,前面的博客有写. 第一步:创建log实体,根据自己业务而定, p ...

  5. spring AOP切面日志

    spring AOP切面日志 导入依赖 <properties><fastjson.version>1.2.49</fastjson.version> </p ...

  6. Spring AOP切面使用详细解析

    相关文章: SpringBoot AOP切面的使用 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析) 架构师系列内容:架构师学习笔记(持续更新)) Spring AOP 应 ...

  7. 日志管理(spring AOP切面拦截)

    **最近,在写日志管理的东西呢,用了几种方法试,还是拦截比较好用,直接截下来传入到数据库中存储. 写的时候,真是头疼啊. 哦~对了,忘了说了,不需要用到Dao层哦. 首先,来一个POJO实体类吧,我看 ...

  8. Spring AOP 切面(Aspect)应用详解

    1. AOP 切面应用 下面是一个AOP切面的一个简单的应用实例 引入AOP依赖 <dependency><groupId>org.springframework.boot&l ...

  9. Spring aop切面插入事物回滚

    <!-- tx标签配置 事物--> <tx:advice id="txadvice" transaction-manager="transactionM ...

最新文章

  1. 多传感器融合之滤波(二)EKF
  2. Python 之 matplotlib (十三) subplot分格显示
  3. 如何让区块链连接外面的世界
  4. indices should be one-based and in ascending order
  5. php生成随机密码的几种方法
  6. Jenkins发布PHP项目之一自动化部署
  7. 3dmax导出fbx没有贴图_SU教程 | 如何通过Skimp插件导入高质量模型、优化模型、匹配贴图?...
  8. 参考文献的引用的格式
  9. MVC3.0+knockout.js+Ajax 实现简单的增删改查
  10. 向Spring大佬低头——大量源码流出解析
  11. Anaconda下载安装以及Tensorflow和Pytorch的安装
  12. css实现动态渐变闪烁功能
  13. noip 2009 靶形数独
  14. 计算机网络英文论文,计算机网络与因特网论文(英文版).doc
  15. YV12,I420,YUV420P的区别与格式转换
  16. pyqt 使用问题总结
  17. php token放到head,我觉得把 Token 放在 Header 里更好一些
  18. python简单爬虫代码,python入门
  19. Ubuntu18.04离线安装网卡驱动、gcc、make等
  20. MySQL测试题——开发公司人事管理系统,包括 Employee表 和 Department表

热门文章

  1. Hibernate中SessionFactory配置
  2. c语言怎样写积分程序,C语言实现定积分求解方法
  3. 用python发邮件便利之处_第18课 python 发送邮件
  4. 什么是Platform SDK?
  5. module 与 component 的区别
  6. DC 不支持P2V或者V2P的虚拟化转换
  7. 《基础会计学》期末模拟试题及答案
  8. 【GANs】C-RNN-GAN
  9. JAVA 的性能优化
  10. Android Snackbar使用方法及小技巧-design