http://zywang.iteye.com/blog/974226

http://www.cnblogs.com/garinzhang/p/java_spring_aop_aspect.html

第一种配置方法:使用@AspectJ标签

  1. 在配置文件中添加<aop:aspectj-autoproxy/>注解
  2. 创建一个Java文件,使用@Aspect注解修饰该类
  3. 创建一个方法,使用@Before、@After、@Around等进行修饰,在注解中写上切入点的表达式

说明:上述Java文件创建好后,需要将其在Spring的容器中进行声明,可以在配置文件中定义<bean/>节点,也可以使用@Component组件进行修饰

示例:

 1 import org.aspectj.lang.ProceedingJoinPoint;
2 import org.aspectj.lang.annotation.After;
3 import org.aspectj.lang.annotation.AfterThrowing;
4 import org.aspectj.lang.annotation.Around;
5 import org.aspectj.lang.annotation.Aspect;
6 import org.aspectj.lang.annotation.Before;
7 import org.springframework.stereotype.Component;
8
9 /**
10 * 基于注解的AOP日志示例
11 * @author ZYWANG 2011-3-24
12 */
13 @Component
14 @Aspect
15 public class AopLog {
16
17 //方法执行前调用
18 @Before("execution (* com.zywang.services.impl.*.*(..))")
19 public void before() {
20 System.out.println("before");
21 }
22
23 //方法执行后调用
24 @After("execution (* com.zywang.services.impl.*.*(..))")
25 public void after() {
26 System.out.println("after");
27 }
28
29 //方法执行的前后调用
30 @Around("execution (* com.zywang.services.impl.*.*(..))")
31 public Object around(ProceedingJoinPoint point) throws Throwable{
32 System.out.println("begin around");
33 Object object = point.proceed();
34 System.out.println("end around");
35 return object;
36 }
37
38 //方法运行出现异常时调用
39 @AfterThrowing(pointcut = "execution (* com.zywang.services.impl.*.*(..))",throwing = "ex")
40 public void afterThrowing(Exception ex){
41 System.out.println("afterThrowing");
42 System.out.println(ex);
43 }
44 }

上面这段代码中多次使用了重复的切入点,这种情况下,可以使用@Pointcut标注,来修改一个切入点方法(这个方法不需要参数和方法体),然后就可以在@Before等标注中引用该方法作为切入点,示例如下:

 1 import org.aspectj.lang.ProceedingJoinPoint;
2 import org.aspectj.lang.annotation.Around;
3 import org.aspectj.lang.annotation.Aspect;
4 import org.aspectj.lang.annotation.Before;
5 import org.aspectj.lang.annotation.Pointcut;
6 import org.springframework.stereotype.Component;
7
8 /**
9 * 基于注解的AOP日志示例
10 * @author ZYWANG 2011-3-24
11 */
12 @Component
13 @Aspect
14 public class AopLog {
15
16 @Pointcut("execution (* com.iflysse.school.services.impl.*.*(..))")
17 public void pointcut(){}
18
19 //方法执行前调用
20 @Before("pointcut()")
21 public void before() {
22 System.out.println("before");
23 }
24
25 //方法执行的前后调用
26 @Around("pointcut()")
27 public Object around(ProceedingJoinPoint point) throws Throwable{
28 System.out.println("begin around");
29 Object object = point.proceed();
30 System.out.println("end around");
31 return object;
32 }
33 }

第二种配置方法:基于配置文件的配置

  1. 创建一个Java文件,并指定一个用于执行拦截的方法,该方法可以有0个或多个参数
  2. 在Spring配置文件中注册该Java类为一个Bean
  3. 使用<aop:config/>、<aop:aspect/>等标签进行配置

示例:

Java文件

 1 import org.aspectj.lang.ProceedingJoinPoint;
2
3 /**
4 * 基于配置文件的AOP日志示例
5 * @author ZYWANG 2011-3-24
6 */
7 public class AopLog {
8
9 //方法执行的前后调用
10 public Object runOnAround(ProceedingJoinPoint point) throws Throwable{
11 System.out.println("begin around");
12 Object object = point.proceed();
13 System.out.println("end around");
14 return object;
15 }
16
17 }

使用第二种方式的AOP配置,在Eclipse(有SpringIDE插件)中被拦截到的方法中有标识显示

以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》

Spring3.0中的AOP配置方法的更多相关文章

  1. WCF学习之旅—WCF4.0中的简化配置功能(十五)

    六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...

  2. AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案

    AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案 以下代码为asp.net环境下,c#语言编写的解决方案.数据用Dictiona ...

  3. CentOS-7.0.中安装与配置Tomcat-7的方法

    安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址:http://tomcat.apache.org/down ...

  4. spring3.0.5的aop使用

    spring3.0.5开始支持jpa2.0了,但是最近笔者在使用他的的时候发现了3.0.5的包与2.5.5相比,有所精简.其他外部的包,我们需要自己下载. AOP必须的spring包 org.spri ...

  5. django 2.0 中URL的include方法使用分析

    一.问题出现: 在使用Django2.0,配置全局URL时,希望指向某个APP的URL,配置如下: from django.contrib import admin from django.conf. ...

  6. AFNetworking 3.0中调用[AFHTTPSessionManager manager]方法导致内存泄漏的解决办法

    在使用AFNetworking3.0框架,使用Instruments检查Leaks时,检测到1000多个内存泄漏的地方,定位到 [AFHTTPSessionManager manager] 语句中,几 ...

  7. Vue2.0中的路由配置

    Vue2.0较Vue1.0,路由有了较大改变.看一下Vue2.0中的路由如何配置: 步骤一: 在main.js文件中引入相关模块以及组件及实例化vue对象配置选项路由及渲染App组件 默认设置如下: ...

  8. vue3.0中的双向数据绑定方法

    熟悉vue的人都知道在vue2.x之前都是使用object.defineProperty来实现双向数据绑定的 而在vue3.0中这个方法被取代了 1. 为什么要替换Object.definePrope ...

  9. VS2015ASP.NET MVC5项目中Spring.NET配置方法(超详细)

    首先,在ASP.NET MVC5项目右键,如下图所示,选择“管理Nuget程序包...” 然后,在弹出的页面的搜索框中输入“spring.web”,在返回结果中选择Spring.Web和Spring. ...

  10. Spring3数据源的6种配置方法

    在Spring3中,配置DataSource的方法有五种. 第一种:beans.xml <bean id="dataSource" class="org.apach ...

随机推荐

  1. NumPy(1)-常用的初始化方法

    一.NumPy介绍 NumPy是Python中科学计算的基础包,它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学.逻辑.形状操作 ...

  2. 投个 3D 冰壶,上班玩一玩

    ​本篇文章将介绍如何使用物理引擎和图扑 3D 可视化技术来呈现冰壶运动的模拟. Oimo.js 物理引擎 Oimo.js 是一个轻量级的物理引擎,它使用 JavaScript 语言编写,并且基于 Oi ...

  3. 初始elasticSearch

    elasticSearch 大致印象 为什么用? mysql更擅长于crud等操作,当一张表达到百万级别时,检索速度过慢 es检索速度快 基本概念 Index索引(两层意思) 动词:类似mysql的i ...

  4. quarkus实战之六:配置

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<quarkus实战>系列 ...

  5. 关于微信小程序原生组件与uniApp混合开发过程遇到的问题与解决方式

    前言: 在实际开发过程中,尤其是小程序的开发,我们常常会遇到一些在文档中解决不了的问题,在这里,我就浅谈一下我遇到的一些问题 1.小程序的构建框架是uni-app,却突然被要求用原生的微信小程序代码来 ...

  6. vue + canvas 实现涂鸦面板

    前言 专栏分享:vue2源码专栏,vue router源码专栏,玩具项目专栏,硬核 推荐 欢迎各位 ITer 关注点赞收藏 此篇文章用于记录柏成从零开发一个canvas涂鸦面板的历程,最终效果如下: ...

  7. JNDI注入的本地搭建和分析

    JNDI注入的本地搭建和分析   JNDI概述 JNDI(The java Naming and Directory Interface,java命名和目录接口)是一组在Java应用中访问命名和目录服 ...

  8. 从一些常见的错误聊聊mysql服务端的关键配置

    背景 每一年都进行大促前压测,每一次都需要再次关注到一些基础资源的使用问题,订单中心这边数据库比较多,最近频繁报数据库异常,所以对数据库一些配置问题也进行了研究,本文给出一些常见的数据库配置,说明这些 ...

  9. 如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件

    原文链接:如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件 ChatGPT以下称为AI智能聊天机器人 一.AI智能聊天机器人4中集成"Stories"插件 对于已经熟悉 ...

  10. 通过AOP拦截Spring Boot日志并将其存入数据库

    本文分享自华为云社区<Spring Boot入门(23):[实战]通过AOP拦截Spring Boot日志并将其存入数据库>,作者:bug菌. 前言 在软件开发中,常常需要记录系统运行时的 ...