AOP切点相关
1、切点定义
切点定义包含两个部分
一个切入点表达式
一个包含名字和任意参数的方法签名
package com.sysker.aspect;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class CreatePointcut {
@Pointcut("execution(* transfer(..))")
private void anyOldTransfer() { }
}
- 在@AspectJ风格的AOP中,切入点签名采用一个普通的方法定义(方法体通常为空)来提供,且该方法的返回值必须是void;切入点表达式需要使用@Point注解来标注,如上代码
- 切入点表达式,也就是@Pointcut 注解的值,是正规的AspectJ 切入点表达式
- 如果需要使用本切面类中的切入点,则可以在使用@Before、@After、@Around等注解定义Advice时,使用pointcut或value属性值引用已有的切入点
package com.sysker.aspect;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class CreatePointcut {
@Pointcut("execution(* transfer(..))")
private void anyOldTransfer() {}
@Pointcut("execution(* transfer(..))")
public void myPointcut() {}
@AfterReturning(pointcut = "mypointcut()", returning = "retVal")
public void writeLog(String msg, Object retVal) {
}
}
- private修饰的切点,其他切面类不能使用,而且在引用其他切面类中的切点时,必须添加类名前缀
@After(value="CreatePointcut.myPointcut()")
public void show() {
System.out.println("myPointcut模拟释放资源");
}
2、切入点指示符
2.1 execution:匹配执行方法的连接点,用法相对复杂,表达式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
- modifiers-pattern:指定方法的修饰符,支持通配,该部分可省略;
- ret-type-pattern:指定方法的返回值类型,支持通配符,可以使用“*”通配符来匹配所有的返回值类型
- declaring-type-pattern:指定方法所属的类,支持通配符,该部分可省略;
- name-pattern:指定匹配指定的方法名,支持通配,可以使用“*”通配符来匹配所有方法
- parapn-pattern:指定方法声明中的形参列表,支持两个通配符,即“*”和“..”,其中“*”代表一个任意类型的参数,而(..)代表零个或多个任意类型的参数
- throws-pattern:指定方法声明抛出的异常,支持通配符,该部分可省略
2.2 within:用于限定匹配特定类型的连接点,当使用Spring AOP的时候,只能匹配方法执行的连接点
// 在com.sysker.service包中的任意连接点(在Spring AOP中只是方法执行的连接点)
within(com.sysker.service.*)
// 在com.sysker.service包或其子包中的任意连接点(在Spring AOP中只是方法执行的连接点)
within(com.sysker.service..*)
2.3 this:用于限定AOP代理必须指定类型的实例,匹配该对象的所有连接点,当使用Spring AOP的时候,只能匹配方法执行的连接点
// 匹配实现了 com.sysker.service.AccountService接口的AOP代理的所有连接点
// 在SpringAOP中只是方法执行的连接点
this(com.sysker.service.AccountService)
2.4 target:用于对连接点的参数类型进行限制,要求参数类型是指定类型的实例,当使用Spring AOP的时候,只能匹配方法执行的连接点
// 匹配实现了 com.sysker.service.AccountService.AccountService 接口的目标对象的所有连接点
// 在Spring AOP中只是方法执行的连接点
target(com.sysker.service.AccountService.AccountService)
2.5 args:用于对连接点的参数类型进行限制,要求参数类型是指定类型的实例。当使用Spring AOP的时候,只能匹配方法执行的连接点。
// 匹配只接受一个参数,且传入的参数类型是serializable
// 在Spring AOP中只是方法执行的连接点
target(com.sysker.service.AccountService.AccountService)
2.6 bean:用于限定只匹配指定bean实例内的连接点,实际上只能使用方法执行行为作为连接点
- 定义bean表达式时需要传入bean的id或name,表示只匹配该bean实例内的连接点,支持使用“*”通配符
// 匹配tradeService Bean实例内方法执行的连接点
bean(tradeService)
// 匹配名字以service结尾的Bean实例内方法执行的连接点
bean(*Service)
3 组合切入点表达式
&& :要求连接点同时匹配两个切入点表达式
|| :只要连接点匹配任意一个切入点表达式
! : 要求连接点不匹配指定的切入点表达式
AOP切点相关的更多相关文章
- 如何通过自定义注解实现AOP切点定义
面向切面编程(Aspect Oriented Programming, AOP)是面向对象编程(Object Oriented Programming,OOP)的强大补充,通过横切面注入的方式引入其他 ...
- springboot+aop切点记录请求和响应信息
本篇主要分享的是springboot中结合aop方式来记录请求参数和响应的数据信息:这里主要讲解两种切入点方式,一种方法切入,一种注解切入:首先创建个springboot测试工程并通过maven添加如 ...
- Spring AOP 切点(pointcut)表达式
这遍文章将介绍Spring AOP切点表达式(下称表达式)语言,首先介绍两个面向切面编程中使用到的术语. 连接点(Joint Point):广义上来讲,方法.异常处理块.字段这些程序调用过程中可以抽像 ...
- Spring AOP切点表达式用法总结
1. 简介 面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的.通过面向对象编程,不同的模 ...
- AOP切点表达式
Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execu ...
- Spring Aop切点
切点用于准确定位应该在什么地方应用切面的通知.通知和切点是切面的最基本的元素.在Spring AOP中要使用AspectJ的切点表达式来定义切点.下面我们列出Spring AOP所支持的AspectJ ...
- Spring系列25:Spring AOP 切点详解
本文内容 Spring 10种切点表达式详解 切点的组合使用 公共切点的定义 声明切点@Poincut @Poincut 的使用格式如下: @Poincut("PCD") // 切 ...
- 使用注解匹配Spring Aop切点表达式
Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...
- Spring基于AspectJ的AOP的开发之AOP的相关术语
1. Joinpoint(连接点) -- 所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点(任何一个方法都可以称为连接点) 2. Pointc ...
随机推荐
- Js基础之常用对象
今天来总结一下js中的常用对象: 1.string对象 常用方法: charAt():返回在指定位置的字符. charCodeAt():返回在指定的位置的字符的 Unicode 编码. concat( ...
- 一个分类,两个问题之ArrayList
前段时间,在做一个商品的分类,分类有3级,类似于以下这种形式的: ---食物 ---蔬菜 ---白菜 ---材料 ---鸡肉 ....... 而我需要做的是将取得的一个商品的字符串类型的分类ID集,然 ...
- java数组复制的几种常见用法
1.1数组复制的几种常见用法 1.1.1System.arraycopy的用法 int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,1 ...
- c# 实用精华知识点全解
本文介绍c#的实用知识点 写在前面(通识) vs常用快捷键 F5 调试运行程序 ctrl F5 不调试运行程序 F11 逐条语句调试 F10 逐过程调试程序 注释快捷键 ctrl + k + c 代码 ...
- DDD学习笔录——简介DDD的战术模式、问题空间和解空间
DDD的战术模式 DDD的战术模式(也称为模型构造块)是一个帮助创建 用于复杂有界上下文的有效模型的 模式集合. 也就是我们常说的设计模式. 问题空间 问题空间将问题域提炼成更多可管理的子域,是真对于 ...
- java之类的封装
类和对象成员变量,成员函数特殊的成员变量和成员函数 函数重载 构造函数 静态变量 静态函数面向对象:封装 继承 多态封装 Encapsulation为什么需要封装?外界无法直接操作对象的具体的属性(安 ...
- 【oracle】首次启动SQL Developer配置java.exe出错(Could not find jvm.cfg! )
1.环境 win7/8/8.1 x64,Oracle 11g r2,jdk7 x64 2.问题 第一次启动Oracle SQL Developer的时候会让我们填写Java.exe的路径,我在jdk ...
- css中字间距调整(转)
css中字间距调整 (2014-01-02 13:51:07) 标签: 汉字 英文 间距 letter-spacing word-spacing 杂谈 分类: 网页制作 汉字间字间距设置:letter ...
- cocos2dx帧动画
//帧动画的创建 //方式一,通过多张图片来创建 auto sprite1 = Sprite::create("grossini_dance_05.png"); sprite1-& ...
- 分布式锁2 Java非常用技术方案探讨之ZooKeeper 【转载】
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.以自己结合实际工作中的一些经验和网上看到的一些资料 ...