在软件开发中,分布于应用多出的功能被称为和横切关注点. 通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(可是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离正是面向切面编成(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 切面编程记录日志和接口执行时间

    最近客户现在提出系统访问非常慢,需要优化提升访问速度,在排查了nginx.tomcat内存和服务器负载之后,判断是数据库查询速度慢,进一步排查发现是因为部分视图和表查询特别慢导致了整个系统的响应时间特 ...

  3. spring AOP(切面) 表达式介绍

    在 spring AOP(切面) 例子基础上对表达式进行介绍 1.添加接口删除方法 2.接口实现类 UserDaoServer 添加实现接口删除方法 3.测试类调用delUser方法 4. 输出结果截 ...

  4. 使用Spring AOP切面解决数据库读写分离

    http://blog.jobbole.com/103496/ 为了减轻数据库的压力,一般会使用数据库主从(master/slave)的方式,但是这种方式会给应用程序带来一定的麻烦,比如说,应用程序如 ...

  5. 利用Spring AOP切面对用户访问进行监控

    开发系统时往往需要考虑记录用户访问系统查询了那些数据.进行了什么操作,尤其是访问重要的数据和执行重要的操作的时候将数记录下来尤显的有意义.有了这些用户行为数据,事后可以以用户为条件对用户在系统的访问和 ...

  6. Spring AOP 切面编程的方法

    spring aop的使用分为两种,一种是使用注解来实现,一种是使用配置文件来实现. 先来简单的介绍一下这两种方法的实现,接下来详细的介绍各处的知识点便于查阅.目录如下: 1.基于注解实现spring ...

  7. [Spring] Aspect Oriented Programming with Spring | AOP | 切面 | 切点

    使用Spring面向切面编程 1.介绍 AOP是OOP的补充,提供了另一种关于程序结构的思路. OOP的模块化的关键单位是 类 . AOP的则是aspect切面. AOP 将程序的逻辑分成独立的块(叫 ...

  8. Spring AOP 切面实现操作日志

    创建接口注解日志类 package com.fh.service.logAop; /** * Created by caozengling on 2018/7/21. */ import java.l ...

  9. spring AOP(切面)

    AOP 基本概念cross  cutting concern横切性关注点:独立服务,遍布在系统处理流程之中 Aspect对横切关注点模块化 advice对横切关注点具体实现 pointcut定义adv ...

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

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

随机推荐

  1. ***微信浏览器禁止app下载链接怎么办

    通过扫描二维码下载APP已成为一个非常方便的方式,微信也成为扫描二维码重要的工具,但是扫描后微信浏览器会对APK和appStore的链接进行屏蔽,导致用户无法正常下载.本文提供两个迂回的解决方案:1. ...

  2. ZOJ 3705 Applications

    点我看题目 题意 : 真是一道又臭又长的模拟题啊,不过比赛的时候没看,赛完了补的. 给你N个候选人,让你从中选M个候选人,根据四个大规则来确定每个人的分数,然后选分数前M个人的输出. 1.在MOJ上做 ...

  3. javaweb学习总结(三十六)——使用JDBC进行批处理

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  4. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍

    一. 1.SpEL expressions are framed with  #{ ... } 2.SpEl的作用 Sp EL has a lot of tricks up its sleeves, ...

  5. C# Json处理日期和Table

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Ru ...

  6. js中replace用法

    js中replace的用法 replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则 ...

  7. 手势识别官方教程(8)拦截触摸事件,得到触摸的属性如速度,距离等,控制view展开

    onInterceptTouchEvent可在onTouchEvent()前拦截触摸事件, ViewConfiguration得到触摸的属性如速度,距离等, TouchDelegate控制view展开 ...

  8. WCF - Creating WCF Service

    http://www.tutorialspoint.com/wcf/wcf_creating_service.htm Creating a WCF service is a simple task u ...

  9. Error building results for action sayHello in namespace /inteceptor -

    原因:不知道如何编译此 struts.xml ,解决方法:导入struts-default文件: <package name="test"  namespace=" ...

  10. WPF手写代码配置文件——单例

    public class SettingHelper { //WPF下配置文件路径 public static readonly string SettingFilePath = AppDomain. ...