Aop编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Aop编程相关的知识,希望对你有一定的参考价值。
概述:
Aop, aspect object programming 面向切面编程
功能: 让关注点代码与业务代码分离!
关注点,
重复代码就叫做关注点;
切面,
关注点形成的类,就叫切面(类)!
面向切面编程,就是对很多功能中有的重复的代码进行抽取,再在运行的时候往业务方法上动态植入“切面类代码”。
切入点,
执行目标对象方法,动态植入切面代码。
可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。
1、切入点表达式
切入点表达式,
可以对指定的“方法”进行拦截; 从而给指定的方法所在的类生层代理对象。
在下载的源文件的api中找到如下语法:
Spring AOP users are likely to use the execution
pointcut designator the most often. The format of an execution expression is:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
modifiers-pattern:修饰符 ?:问号表示0个或1个 ret-type-pattern:返回值类型(*:表示任意类型) declaring-type-pattern:声明类型 name-pattern:方法名称
如下
1、拦截所有公有方法
execution(public * *(..))
2、拦截所有的set开头的方法
execution(* set*(..))
3、拦截某个类的所有方法
execution(* com.xyz.service.AccountService.*(..))
4、拦截com.xyz.service包机器子包下的所有方法
execution(* com.xyz.service..*.*(..))
5、多个表达式(拦截多个方法)
<aop:pointcut expression="execution(* com.gqx.g_pointcut.UserDao.save(..) ) || execution(* com.gqx.g_pointcut.OrderDao.save(..) )" id="pc"/>
或者
<aop:pointcut expression="execution(* com.gqx.g_pointcut.UserDao.save(..) ) or execution(* com.gqx.g_pointcut.OrderDao.save(..) )" id="pc"/>
如果是且关系,字符的话要转移"&&"或者直接用and;但要注意这在逻辑上没有任何意义;
6、取非值,加上“!”
<aop:pointcut expression="!execution(* com.gqx.g_pointcut.UserDao.save(..) ) || execution(* com.gqx.g_pointcut.OrderDao.save(..) )" id="pc"/>
如果想让两个方法都不执行,也可这样写
<aop:pointcut expression="!execution(* com.gqx.g_pointcut.UserDao.save(..) ) and not execution(* com.gqx.g_pointcut.OrderDao.save(..) )" id="pc"/>
以上是关于Aop编程的主要内容,如果未能解决你的问题,请参考以下文章