简单描述一下Spring AOP

* 对函数的入口,结束(被称为Aspect - - 切面)都进行日志的打印;

* 函数的进行过程被看做 Jion point,类似的可以是对属性的访问前后,(注意 spring aop 不提供类似属性访问的这些操作,只能            做一些跟函数执行相关的aop );

           * 所以说spring aop 并不是一个完整的aop实现,当然spring aop的目标: 整合aop与IOC这两部分的功能;

           * 如果要了解更完整的aop,可以了解一下aop框架: AspectJ ;

           * spring aop的两种使用方式:

                         XML  schema-based  AOP

                         @AspectJ annotation-based  AOP

* Mylogger在对函数出口,入口打日志的行为被称为advice,定义的是切面在某个特定的点,函数执行的某个功能吧。

* 在实际的aop操作时,我们要告诉那些的逻辑代码需要aop操作的,也就是我们需要一种方式来告诉aspect,在哪些函数上需要               去执行aspect。那一般情况下,假如,我们通过正则表达式的方式,Caculator*(这里的表达式是错误的)所有的方法 上                都做操作,你可以告诉这个“表达式”aop去哪些业务代码上去做aop操作;那我们把这个“表达式”称为 Pointcut 。

1.aop 能做什么?

a.aop可以作用于函数执行;

b.aop可以简化代码;

c.aop可以对代码进行解耦;

d.aop可以作用对所有访问权限(private、protected、public)的函数;

2.aop由那些部分构成?

(1)aspect:日志、安全等一些横切的功能;

(2)jion  piont:主要指 函数的执行或者属性的访问;

(3)advice:在某个函数的执行点上要执行的切面功能;

              五种类型的增强或通知(Advice)

                Before:函数执行前、

                After returning:函数正常返回之后、

                After-throwing:函数抛出异常之后、

                After finally:函数返回之后

                Aound:函数的执行前后

(4)Pointcut <匹配横切目标函数的表达式>;其实就是寻找那些函数需要aop;

                  (注意事项:必须声明函数的返回值匹配模式、必须声明函数的参数李彪匹配模式)

示例如下:

  • 任意公共方法的执行:

    execution(public * *(..))
  • 任何一个以“set”开始的方法的执行:

    execution(* set*(..))
  • AccountService 接口的任意方法的执行:

    execution(* com.xyz.service.AccountService.*(..))
  • 定义在service包里的任意方法的执行:

    execution(* com.xyz.service.*.*(..))
  • 定义在service包或者子包里的任意方法的执行:

    execution(* com.xyz.service..*.*(..))
  • 在service包里的任意连接点(在Spring AOP中只是方法执行) :

    within(com.xyz.service.*)
  • 在service包或者子包里的任意连接点(在Spring AOP中只是方法执行) :

    within(com.xyz.service..*)

猜你喜欢

转载自blog.csdn.net/weixin_39746740/article/details/81283126