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"/>

 如果是且关系,字符的话要转移"&amp;&amp;"或者直接用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编程的主要内容,如果未能解决你的问题,请参考以下文章

AOP 面向切面编程

小议webpack下的AOP式无侵入注入

Spring的AOP面向切面编程

Spring的AOP面向切面编程

面向切面编程

Aop编程