AOP Spring实现

标签: AOP Spring Annotation
4人阅读 评论(0) 收藏 举报
分类:

AOP在Spring中的实现粒度较大,只能在方法级别上进行切面编程,足够简单。

AOP advice in Spring

Advice Range
Before 在切点方法之前执行
After 在切点方法之后执行
After-returning 切点方法成功执行之后执行
After-throwing 切点方法异常执行且抛出异常
Around After和Before建议组合

Spring AOP支持属性

  1. weaving:runtime
  2. AOP 实现方式:introduction 和对象Proxy
  3. 切面对象类型:POJO
  4. 接入点筛选方式:Pointcut筛选,通过Pointcut对参数,方法名,包中类进行切点筛选

Spring Pointcut 实现

Spring筛选切入点的方法是通过Pointcut,Pointcut的常用筛选条件(注解方式):

注解方式 描述
@args 方法参数筛选
@target 筛选被指定注解类注解的Bean
@within 筛选指定包下的类

语法实例1:

execution(** package.PaticularClass.SpecificMethod(..))

//execution是一个标记,代表筛选开始,通常这个语句写在@advice注解里
//** 代表被筛选的方法SpecificMethod返回任何类型的值
//package为包名
//PaticularClass:指定类名
//SpecificMethod:指定方法名
//注意前面提到Spring AOP的切面粒度为方法级别

语法实例2:

  execution(** package.PaticularClass.SpecificMethod(..) 
  && within(domain.*))
//在语法实例1的条件下加上只在类包domain下筛选的条件
//&&代表建议的且运算,同样可以用||,!分别代表或和非运算

语法实例3:

  execution(** package.PaticularClass.SpecificMethod.(int)
  && args(argumentname))
  //argumentname和方法签名中方法相同

现在可以搭建一个切面类:

@Aspect //注解切面类
public class Specific{

     @Before(execution(** package.PaticularClass.SpecificMethod(..) 
             && within(domain.*)))
     public void executeBeforeAdvisedMethod(){
           //do something
    }

     @After(execution(** package.PaticularClass.SpecificMethod(..) 
             && within(domain.*)))
     public void executeAfterAdvisedMethod(){
          //do something
     }
}

注意到,每个注解方法都有一个@advice类注释,用来标识切面类方法的执行时机,但是@Before@After方法需要定义相同的节点,这并不是我们想要的!可以定义一个条件对象,当需要使用这个条件对象时候,引用它,这在Spring中叫做Pointcut对象。于是我们可以改编上述代码:

@Aspect //注解切面类
public class Specific{
      //这个定义筛选对象注解,注解execute()
     @Pointcut(execution(** package.PaticularClass.SpecificMethod(..) 
             && within(domain.*))) 
     //很尴尬,这里必须加一个Mark,用来标识我们在引入注解这个方法的Pointcut条件
     public void execute(){

    }
    @Before("execute()")
     public void executeBeforeAdvisedMethod(){
           //do something
    }

    @After("execute()")
     public void executeAfterAdvisedMethod(){
          //do something
     }
}
查看评论

【Python】第六周 Python Web项目开发实现(下)

-
  • 1970年01月01日 08:00

Spring AOP四种实现方式Demo详解与相关知识探究

一、前言 在网络上看到一篇博客Spring实现AOP的4种方式,博主写的很通俗易懂,但排版实在抓狂,对于我这么一个对排版、代码格式有强迫症的人来说,实在是不能忍受~~~~(>_ 我亲手实现了一遍,...
  • zhangliangzi
  • zhangliangzi
  • 2016-08-27 18:19:05
  • 12811

Spring学习总结——Spring实现AOP的多种方式

 目录 一、基于XML配置的Spring AOP二、使用注解配置AOP三、AspectJ切点函数四、AspectJ通知注解五、零配置实现Spring IoC与AOP六、示例下载 ...
  • u010987379
  • u010987379
  • 2016-08-08 16:13:26
  • 36661

Spring通过XML实现AOP

  • 2018年04月18日 08:22
  • 4.7MB
  • 下载

Spring实现AOP的4种方式

  • 2015年10月25日 18:28
  • 4.04MB
  • 下载

手动实现Spring Aop

Aop,百度百科的解释:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OO...
  • rickiyeat
  • rickiyeat
  • 2017-01-22 22:13:05
  • 2243

Spring AOP四种实现方式

二、AOP相关概念 (1)AOP是什么?AOP与拦截器的区别? 太抽象的不说,如果你知道Struts2的拦截器,拦截器就是应用的AOP的思想,它用于拦截Action以进行一些预处理或结果处...
  • Summer_YuXia
  • Summer_YuXia
  • 2017-07-14 13:04:03
  • 409

Spring AOP 知识点 & 实现机制

Spring   AOP 一、关于AOP 1. 什么是 AOP? Aspect Orentied Programming:面向切面编程 Object Orentied Programming:面...
  • followMyInclinations
  • followMyInclinations
  • 2016-08-15 13:00:10
  • 1681

Spring AOP的三种实现方式

原文地址:http://blog.csdn.net/udbnny/article/details/5870076 三种方式分别为: 经典的基于代理的AOP @AspectJ注解的切面 ...
  • yu8196378
  • yu8196378
  • 2016-12-21 16:51:14
  • 2285

Spring AOP自定义实现

上一遍文章研究了Spring AOP实现源码,现在自己也想自己实现。假如要对以下接口BarService织入Before增强和After增强接口定义public interface BarServic...
  • csujiangyu
  • csujiangyu
  • 2017-01-02 10:44:07
  • 886
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1091
    排名: 4万+
    博客专栏
    带注释的网页代码
    主要是自己没有事情,学的前端的一些小东西。毕竟前端要懂一点
    最新评论