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框架会自己创建动态代理

 

    <!-- 目标对象 -->

    <bean id="userService" class="cmo.demo.aspectj.UserService"></bean>

    <!-- 通知对象 -->

    <bean id="userServiceAdvice" class="cmo.demo.aspectj.UserHapler"></bean>

    <!-- 声明切面和切点 -->

   

    <!-- 使用aop:config来声明  使用aop:aspect来配置切面,  设置true不管使用什么都用cglib,false不使用接口的时候会用jdkproxy来代理 -->

    <aop:config proxy-target-class="true">

       <aop:aspect ref="userServiceAdvice">

       <aop:pointcut expression="execution(**Test(..))" id="TestPointCut"/>

       <aop:before method="before"pointcut-ref="TestPointCut"/>

       </aop:aspect>

    </aop:config>

由标签决定 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开头的方法









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章