spring aop

来源:互联网 发布:淘宝多少转化率正常 编辑:程序博客网 时间:2024/06/03 05:07

1、概念

1、切面

事务、日志、安全性框架、权限等都是切面
2、通知
      切面中的方法就是通知
3、目标类 
4、切入点(条件) 
只有符合切入点,才能让通知和目标方法结合在一起
5、织入:
形成代理对象的方法的过程
            
好处:

   事务、日志、安全性框架、权限、目标方法之间完全是松耦合的

2、切入点表达式


execution(public * *(..))  所有的公共方法
execution(* set*(..))  以set开头的任意方法
execution(* com.xyz.service.AccountService.*(..)) com.xyz.service.AccountService类中的所有的方法
execution(* com.xyz.service.*.*(..))  com.xyz.service包中的所有的类的所有的方法
execution(* com.xyz.service..*.*(..)) com.xyz.service包及子包中所有的类的所有的方法
execution(* ouc.jeep.spring..*.*(String,?,Integer)) ouc.jeep.spring包及子包中所有的类的有三个参数
                                                    第一个参数为String,第二个参数为任意类型,第三个参数为Integer类型的方法

3、aop加载步骤

springAOP的具体加载步骤:
   1、当spring容器启动的时候,加载了spring的配置文件
   2、为配置文件中所有的bean创建对象
   3、spring容器会解析aop:config的配置 
       1、解析切入点表达式,用切入点表达式和纳入spring容器中的bean做匹配
            如果匹配成功,则会为该bean创建代理对象,代理对象的方法=目标方法+通知
            如果匹配不成功,不会创建代理对象
   4、在客户端利用context.getBean获取对象时,如果该对象有代理对象则返回代理对象,如果没有代理对象,则返回目标对象


说明:如果目标类没有实现接口,则spring容器会采用cglib的方式产生代理对象,如果实现了接口,会采用jdk的方式

4、通知

1、前置通知
  1、在目标方法执行之前执行
  2、无论目标方法是否抛出异常,都执行,因为在执行前置通知的时候,目标方法还没有执行,还没有遇到异常
2、后置通知
  1、在目标方法执行之后执行
  2、当目标方法遇到异常,后置通知将不再执行
  3、后置通知可以接受目标方法的返回值,但是必须注意:
后置通知的参数的名称和配置文件中returning="var"的值是一致的
3、最终通知:
  1、在目标方法执行之后执行
  2、无论目标方法是否抛出异常,都执行,因为相当于finally
4、异常通知
  1、接受目标方法抛出的异常信息
  2、步骤
  在异常通知方法中有一个参数Throwable  ex
  在配置文件中
 <aop:after-throwing method="throwingMethod" pointcut-ref="perform" throwing="ex"/>
5、环绕通知
   1、如果不在环绕通知中调用ProceedingJoinPoint的proceed,目标方法不会执行
   2、环绕通知可以控制目标方法的执行



0 0
原创粉丝点击