spring AOP切面开发 基于aspectJ框架切点开发



Spring整合aspectj框架实现的aop


aspectj框架的配置我就不说了,大家可以自己百度一下,挺简单的


给大家讲一下怎么样使用


用aspectj框架来实现

该框架的特点:

1,可以不用写生成的动态代理的对象.

2,可以写多个切点和多个通知

3,aspectj有六种通知类型

1.     前置通知Before 相当于BeforeAdvice

2.     后置通知AfterReturning 相当于AfterReturningAdvice

3.     环绕通知 Around 相当于MethodInterceptor

4.     抛出通知AfterThrowing 相当于ThrowAdvice

5.     引介通知DeclareParents 相当于IntroductionInterceptor

6.     最终通知After 不管是否异常,该通知都会执行

并且aspectj框架,可以用通知可以不用实现接口



Aspect框架的xml编写

只需要三步

1,定义一个通知对象

2,定义一个目标对象

3,用aop标签(切面),在中间定义切点和添加通知对象,然后就可以了




Aspectj框架会自己创建动态代理

 

   

    "userService" class="cmo.demo.aspectj.UserService">

   

    "userServiceAdvice" class="cmo.demo.aspectj.UserHapler">

   

   

   

    "true">

       "userServiceAdvice">

       "execution(**Test(..))" id="TestPointCut"/>

       "before"pointcut-ref="TestPointCut"/>

      

   

由标签决定 aop:before前置通知   aop:around环绕通知   aop:after后置通知等 .....  记住一定要配置的属性:method要和通知方法名字相同, pointcut-ref:设置的切点

 


关于切点表达式写法

1.     execution(public * *()) 所有的public的方法

2.     execution(*cn.itheima.aop.*(..)) 所有的aop包下的所有类的方法(不包含子包)

3.     execution(*cn.itheima.aop..*(..)) 所有的aop包及其子包下的所有类的方法

4.     execution(*cn.itheima.aop.IOrderService.*(..)) IOrderService接口中定义的所有方法

5.     execution(*cn.itheima.aop.IOrderService+.*(..)) 匹配实现特定接口所有类的方法

6.     execution(*save*(..)) 区配所有的以save开头的方法









你可能感兴趣的:(Spring框架)