Spring入门之AOP实践:@Aspect + @Pointcut + @Before / @Around / @After
零、准备知识
一、实践目标
二、核心代码
// MainController.java
@RestController
public class MainController {
RequestMapping(value="/doSomething", method = RequestMethod.POST)
@CrossOrigin("*")
public void doSomething() {
System.out.println("This is doSomething");
test();
} @RequestMapping(value="/justTest", method = RequestMethod.POST)
@CrossOrigin("*")
public void test() { System.out.println("This is test");}
}
ExampleAop.java为AOP相关代码,定义了pointcut和多个Advice函数。
// ExampleAop.java
@Component
@Aspect
@Order(1)
public class ExampleAop { private static final Logger LOGGER = LoggerFactory.getLogger(ExampleAop.class); // 匹配com.example.demo包及其子包下的所有类的所有方法
@Pointcut("execution(* com.example.demo..*.*(..))")
public void executeService() {
} @Before("executeService()")
public void doBeforeAdvice(JoinPoint joinPoint) throws Exception {
LOGGER.info("Before [{}]", joinPoint.getSignature().getName());
} @Around("executeService()")
public void doAroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
LOGGER.info("Around1 [{}]", joinPoint.getSignature().getName());
joinPoint.proceed();
LOGGER.info("Around2 [{}]", joinPoint.getSignature().getName());
} @After("executeService()")
public void doAfterAdvice(JoinPoint joinPoint) throws Exception {
LOGGER.info("After [{}]", joinPoint.getSignature().getName());
} @AfterReturning("executeService()")
public void doAfterReturningAdvice(JoinPoint joinPoint) throws Exception {
LOGGER.info("AfterReturning [{}]", joinPoint.getSignature().getName());
}
}
编译并运行jar包,调用接口/doSomething。
# 调用接口
curl localhost:8080/doSomething
到服务器观察日志。
<!-- 后台日志 -->
com.example.demo.aop.ExampleAop : Around1 [doSomething]
com.example.demo.aop.ExampleAop : Before [doSomething]
This is doSomething
This is test
com.example.demo.aop.ExampleAop : Around2 [doSomething]
com.example.demo.aop.ExampleAop : After [doSomething]
com.example.demo.aop.ExampleAop : AfterReturning [doSomething]
三、分析与结论
execution(public * com.example.demo.ExampleClass.*(..)) // ExampleClass的所有公有方法
execution(* com.example.demo..*.*(..)) // com.example.demo包及其子包下的所有方法
logSender() || logMessage() // 两个签名的表达式的并集
四、疑问与讨论

(一个猜测)
五、Future Work
Spring入门之AOP实践:@Aspect + @Pointcut + @Before / @Around / @After的更多相关文章
- Spring入门4.AOP配置深入
Spring入门4.AOP配置深入 代码下载 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 之前学习AOP中的一些概念,包括连接点.切入点(pointc ...
- Spring入门3.AOP编程
Spring入门3.AOP编程 代码下载: 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 前面学习的知识是Spring在Java项目中的IoC或DJ,这 ...
- Spring基础系列--AOP实践
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9615720.html 本文目的是简单讲解下Spring AOP的使用. 推荐使用IDEA ...
- Spring入门之AOP篇
听了几节IT黑马营的SPRING课程,照着例程写了一个SPRING 中AOP的例子: 一.准备工作 下载复制或配置JAR包.图方便,我将下载的SPRING包都加上去了.另外还需要aspectj的两个 ...
- Spring入门篇——AOP基本概念
1.什么是AOP及实现方式 什么是AOP AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要 ...
- spring 注解 之 AOP基于@Aspect的AOP配置
Spring AOP面向切面编程,可以用来配置事务.做日志.权限验证.在用户请求时做一些处理等等.用@Aspect做一个切面,就可以直接实现. 1.首先定义一个切面类,加上@Component @A ...
- Spring入门介绍-AOP(三)
AOP的概念 AOP是面向切面编程的缩写,它是一种编程的新思想.对我们经常提起的oop(面对对象编程)有一定的联系. AOP和OOP的关系 AOP可以说是oop的某一方便的补充,oop侧重于对静态的属 ...
- Spring课程 Spring入门篇 5-3 配置切入点 pointcut
1 解析 1.1 xml常见的配置切入点写法 2 代码演练 2.1 xml配置切入点 1 解析 1.1 xml常见的配置切入点写法 2 代码演练 2.1 xml配置切入点 xml配置: <? ...
- 《Java Spring框架》Spring切面(AOP)配置详解
1. Spring 基本概念 AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2 ...
随机推荐
- StackOverflow 周报 - 与高关注的问题过过招(Java)
本篇文章是 Stack Overflow 周报的第二周,共收集了 4 道高关注的问题和对应的高赞回答.公众号「渡码」为日更,欢迎关注. DAY1. serialVersionUID 的重要性 关注: ...
- HelloDjango 第 13 篇:分类、归档和标签页
作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 侧边栏已经正确地显示了最新文章列表.归档.分类.标签等信息.现在来完善归档.分类和标签 ...
- EAS webservice安全模式
1.启用安全控制: isRomoteLocate=false 2.请求添加头部: <soapenv:Header> <SessionId xmlns="http://log ...
- HDU 1045 Fire Net 二分图建图
HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...
- 【百度之星】【思维】hdu 6724Totori's Switching Game
思维题,最后只要判断每个点的度数>=k即可. #pragma comment(linker, "/STACK:1024000000,1024000000") #pragma ...
- CF1028C Rectangles 思维
Rectangles time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- Numbers That Count POJ - 1016
"Kronecker's Knumbers" is a little company that manufactures plastic digits for use in sig ...
- springboot的最简创建方式
springboot是目前比较流行的技术栈之一,我在这里写一个springboot工程最简方式 首先开发工具是IDEA,双击打开IDEA,点击Create new Project 进入到这个页面,选择 ...
- POJ 2391 Ombrophobic Bovines(Floyd+二分+最大流)
题目链接 题意:农场有F(1 <= F <= 200)片草地用于放牛,这些草地有P(1 <= P <= 1500)连接,农场的草地上有一些避雨点,奶牛们可以在避雨点避雨,但是避 ...
- Java IO写文件效率
写入方法: /** *1 按字节写入 FileOutputStream * * @param count 写入循环次数 * @param str 写入字符串 */ public void output ...