博客
关于我
Spring学习笔记:AspectJ指示器
阅读量:560 次
发布时间:2019-03-09

本文共 1423 字,大约阅读时间需要 4 分钟。

AspectJ指示器是Spring中使用AOP技术时的重要工具,其作用是确定对哪些对象执行拦截逻辑。了解execution指标符的常用用法是理解AOP配置最直接的方式之一。

execution是最常用的 AspectJ 指示器,它用于配置拦截的具体方法或类。这种指标符非常灵活,能够根据实际需求进行多种配置。以下是execution指标符的一些典型用法示例。

1. 指定具体方法

execution(修饰符 返回类型 包名.类名.方法名(参数列表))

例如:

execution(* String com.luckincoffee.example.Test1.test(String))

这个指示表示在com.luckincoffee.example包下的Test1类中,返回类型是String、修饰符不限的方法test(String),也就是所有符合条件的方法都会被拦截。

2. 指定包级别的方法

如果希望拦截包级别的所有方法,可以用'*'表示任意修饰符和返回类型:

execution(* * com.luckincoffee.example.Test1.test(String))

或者用'*'表示任意返回类型:

execution(* * com.luckincoffee.example.Test1.test*(String))

3. 指定类级别的方法

可以用一个'*'表示任意方法名:

execution(* * com.luckincoffee.example.Test1.*(..))

4. 指定接口级别的方法

如果需要拦截某个接口及其实现类的全部方法,使用接口名称+.*:

execution(* * com.luckincoffee.example.Test+.*(..))

5. 指定包含特定方法名的类

同时指定类名和特定的方法名,使用特定的字符串格式:

execution(* * com.luckincoffee.example.Test.*To(..))

例如,/TestTo(Shall我理解为Test类中的所有以"to"结尾的方法)。

6. 指定特定包中的类和特定方法名

要拦截特定包下的所有类的特定方法,可以使用".类名",例如:

execution(* * com.luckincoffee.example.*Dao.*(..))

其中,".Dao"表示包名为Dao的所有子包,"(..)"表示所有参数。

7. 扩展表达式

execution(* * com.luckincoffee.example.*(..)) 表示com.luckincoffee.example包下的所有类的所有方法,无限制。

8. 参数类型的指定

参数类型可以通过具体指定来限制:

  • 使用*表示任意类型但参数个数为1:
execution(* * com.luckincoffee.example.Test.*(String))
  • 或者使用具体类型:
execution(* * com.luckincoffee.example.Test.*(java.util.List))
  • 指定参数为某个特定类型及其子类:
execution(* * com.luckincoffee.example.Test.*(Object+))

通过合理配置execution指标符,可以为Spring AOP配置拦截规则,灵活管理应用程序中各部分的业务逻辑。

转载地址:http://ahupz.baihongyu.com/

你可能感兴趣的文章
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
MySQL Troubleshoting:Waiting on query cache mutex
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>
mysql where中如何判断不为空
查看>>