一:springAOP常用的注解

@Aspect:声明方面组件

@Before:声明前置通知

@After-returning:声明后置通知

@After:声明最终通知

@Around:声明环绕通知

@After-throwing:声明异常通知

二:使用SpringAOP的注解对总结一中的案例进行重构

1:注释掉方面组件的声明以及将方面组件应用到目标组件的配置

 1 <!-- 配置日志组件
 2     <bean id="operatorLogger" class="com.hlcui.aspect.OperatorLogger"></bean>
 3
 4      配置方面组件
 5     <aop:config>
 6         <aop:aspect ref="operatorLogger">
 7             <aop:before method="logger" pointcut="within(com.hlcui.controller..*)"/>
 8         </aop:aspect>
 9
10         <aop:aspect ref="operatorLogger">
11             <aop:around method="logger2" pointcut="within(com.hlcui.controller..*)"/>
12         </aop:aspect>
13
14         <aop:aspect ref="operatorLogger">
15             <aop:after-throwing method="logger3" throwing="e" pointcut="within(com.hlcui.controller..*)"/>
16         </aop:aspect>
17     </aop:config>-->
18
19     <!-- 开启SpringAOP的注解扫描 -->
20     <aop:aspectj-autoproxy proxy-target-class="true"/>

2:使用@Aspect注解声明方面组件,并且在方面组件上面声明前置、后置或者是环绕通知

 1 /**
 2  *
 3  */
 4 package com.hlcui.aspect;
 5
 6 import java.text.SimpleDateFormat;
 7 import java.util.Date;
 8
 9 import org.aspectj.lang.ProceedingJoinPoint;
10 import org.aspectj.lang.annotation.AfterThrowing;
11 import org.aspectj.lang.annotation.Around;
12 import org.aspectj.lang.annotation.Aspect;
13 import org.aspectj.lang.annotation.Before;
14 import org.springframework.stereotype.Component;
15
16
17 /**
18  * @author Administrator
19  *
20  */
21 @Aspect
22 @Component
23 public class OperatorLogger {
24
25     @Before("within(com.hlcui.controller..*)")
26     public void logger(){
27         System.out.println("-->记录用户日志");
28     }
29
30     @Around("within(com.hlcui.controller..*)")
31     public Object logger2(ProceedingJoinPoint p ) throws Throwable{
32         String targetName = p.getTarget().getClass().getName();
33         String methodName = p.getSignature().getName();
34         String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
35         String msg = date+"执行"+targetName+methodName;
36         System.out.println(msg);
37         Object obj = p.proceed();
38         System.out.println("调用目标组件业务方法后");
39         return obj;
40     }
41
42     @AfterThrowing(pointcut="within(com.hlcui.controller..*)",throwing="e")
43     public void logger3(Exception e){
44         StackTraceElement[] eles = e.getStackTrace();
45         System.out.println(eles[0].toString());
46     }
47 }

3:运行测试方法

通过结果可以看出,通过注解声明方面组件成功切入目标组件。

转载于:https://www.cnblogs.com/warrior4236/p/6142827.html

spring核心之AOP学习总结二相关推荐

  1. Spring学习总结二

    Spring框架的代理与AOP.AspectJ Spring学习总结二 0.在理解什么是AOP之前的一些话 1.什么是AOP 2.AOP的重要概念 3.代理模式 3.1.静态代理 3.2.动态代理 3 ...

  2. Spring AOP 学习总结

    一.AOP概念 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续 ...

  3. Spring AOP 学习笔记

    Spring 的AOP AOP 专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在Java EE应用中,常常通过AOP 来处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存 ...

  4. Spring核心AOP(面向切面编程)总结

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/75208354冷血之心的博客) 目录 1.AOP概念: 2.AOP特 ...

  5. 《小马哥讲Spring核心编程思想》-第一章学习笔记(1)

    <小马哥讲Spring核心编程思想>-第一章学习笔记(1) 一.课程介绍 1.为什么要学习spring? 2.深入学习spring的难点有哪些? 3.课程的设计思路是怎样的? 二.内容综述 ...

  6. Spring Boot 框架学习笔记(二)(配置文件与数据注入 yaml基本语法 JSR303数据验证 多环境切换 )

    Spring Boot 框架学习笔记(二) 六.appliaction.properties配置与数据注入 6.1 `@Value`注解 测试注入数据 读取输入流 6.2 读取配置文件数据注入 单文件 ...

  7. Spring——AOP学习(静态代理和动态代理模式)

    Spring--AOP学习(静态代理和动态代理模式) 一.代理模式 我们知道学习Spring最重要的两个知识点就是IOC和AOP,AOP的主要思想就是动态代理模式.在了解AOP之前我们必须学习动态代理 ...

  8. 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事

    AOP 概述 什么是 AOP       AOP:全称是 Aspect Oriented Programming 即:面向切面编程 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进 ...

  9. Spring核心部分之AOP,aspectJ框架实现AOP,切入点表达式

    1. 面向切面编程(Aspect Oriented Programming,AOP) AOP:以切面为核心,确定切面的执行时间以及执行位置,底层实现是动态代理. AOP的作用:①在不改动源代码的情况下 ...

最新文章

  1. .N“.NET研究”ET中的异步编程(二)- 传统的异步编程
  2. python gui开发工具_深入解析Python,透析应用开发,涵盖9大应用领域的Python框架...
  3. 0x84bb0001 sqlserver_sqlserver 实现收缩数据库日志操作
  4. Servlet其他关联类---ServletConfig类
  5. 如何更改Visual Studio 2008中类文件引用的默认名称空间?
  6. eclipse快捷键Alt + /
  7. [语]××语录@××--第1篇
  8. Eclipse的Ctrl+Shift+R中过滤文件类型
  9. 操作系统 | 内存文件映射 —— 文件到内存的映射
  10. ssl证书下载与安装 – 如何下载ssl证书
  11. 百趣生物受邀参加代谢组学及脂质组学质谱技术研讨会
  12. Excel取消自动行高调整(取消自动换行)
  13. BLC 以及 线性化
  14. 在mtk6223的软t卡上实现对sdhc卡的读写
  15. 智能DNS - 免费智能DNS解析服务-迄今为止最好用的智能DNS
  16. ppt讲解中的过渡_PPT「过渡页」怎么设计才好看?
  17. pdfmark生成pdf文件并下载
  18. TCP: too many of orphaned sockets错误
  19. SageX3和车辆排队系统、地磅系统集成方案
  20. 台式计算机如何上网设置,台式电脑怎样设置宽带自动连接?

热门文章

  1. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
  2. 《网易编程题》计算糖果
  3. ReactNative-WebView组件
  4. geometry-api-java 学习笔记(一)概述
  5. 解决OutOfMemoryError: unable to create new native thread问题
  6. Spark RDD中cache和persist的区别
  7. 推荐系统遇上深度学习(二十)-贝叶斯个性化排序算法原理及实战
  8. Hbase总结(八)Hbase中的Coprocessor
  9. 数据结构 -- 搜索二叉树
  10. 如何将页脚固定在页面底部