Spring AOP切面
在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成(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切面相关推荐
- Spring AOP切面的时候参数的传递
Spring AOP切面的时候参数的传递 Xml: <?xml version="1.0" encoding="UTF-8"?> <beans ...
- spring aop 切面添加日志
这是一个非常简单的spring aop切面添加日志的程序,下面来看一下这个程序 1.程序使用jar包 2.切面类LoggingAspect.java package com.cailei.aop.as ...
- Spring AOP 切面@Around注解的具体使用
@Around注解可以用来在调用一个具体方法前和调用后来完成一些具体的任务. 比如我们想在执行controller中方法前打印出请求参数,并在方法执行结束后来打印出响应值,这个时候,我们就可以借助于@ ...
- 【经典】Spring aop切面实现异步添加日志—完整版
系统开发中我们常遇到要处理系统日志等信息的,在此我分享一篇 利用spring aop切面来异步添加日志的操作,其中用到了 队列和多线程,前面的博客有写. 第一步:创建log实体,根据自己业务而定, p ...
- spring AOP切面日志
spring AOP切面日志 导入依赖 <properties><fastjson.version>1.2.49</fastjson.version> </p ...
- Spring AOP切面使用详细解析
相关文章: SpringBoot AOP切面的使用 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析) 架构师系列内容:架构师学习笔记(持续更新)) Spring AOP 应 ...
- 日志管理(spring AOP切面拦截)
**最近,在写日志管理的东西呢,用了几种方法试,还是拦截比较好用,直接截下来传入到数据库中存储. 写的时候,真是头疼啊. 哦~对了,忘了说了,不需要用到Dao层哦. 首先,来一个POJO实体类吧,我看 ...
- Spring AOP 切面(Aspect)应用详解
1. AOP 切面应用 下面是一个AOP切面的一个简单的应用实例 引入AOP依赖 <dependency><groupId>org.springframework.boot&l ...
- Spring aop切面插入事物回滚
<!-- tx标签配置 事物--> <tx:advice id="txadvice" transaction-manager="transactionM ...
最新文章
- 多传感器融合之滤波(二)EKF
- Python 之 matplotlib (十三) subplot分格显示
- 如何让区块链连接外面的世界
- indices should be one-based and in ascending order
- php生成随机密码的几种方法
- Jenkins发布PHP项目之一自动化部署
- 3dmax导出fbx没有贴图_SU教程 | 如何通过Skimp插件导入高质量模型、优化模型、匹配贴图?...
- 参考文献的引用的格式
- MVC3.0+knockout.js+Ajax 实现简单的增删改查
- 向Spring大佬低头——大量源码流出解析
- Anaconda下载安装以及Tensorflow和Pytorch的安装
- css实现动态渐变闪烁功能
- noip 2009 靶形数独
- 计算机网络英文论文,计算机网络与因特网论文(英文版).doc
- YV12,I420,YUV420P的区别与格式转换
- pyqt 使用问题总结
- php token放到head,我觉得把 Token 放在 Header 里更好一些
- python简单爬虫代码,python入门
- Ubuntu18.04离线安装网卡驱动、gcc、make等
- MySQL测试题——开发公司人事管理系统,包括 Employee表 和 Department表