zoukankan      html  css  js  c++  java
  • spring学习记录_spring的 AOP

    spring中的AOP配置

    一、配置文件方式配置

      1、把通知Bean也交给spring来管理

      2、使用aopconfig标签表明开始AOP配置

      3、使用aop:aspect标签表明配置切面

          id属性:给切面提供一个唯一标识

          ref属性:指定通知类beanId

      4、在aop:aspect标签的内部使用对应标签来配置通知的类型

       以下示例是让printLog方法在切入点方法执行之前执行,所以为前置通知。

           aopbefore:表示前置通知

           aopbefore里面的method属性:用于指定Logger类中哪个方法是前置通知

           aopbefore里面的pointcut属性:用于指定切入点表达式,该表达式的含义指的是对业务层中哪些方法增强  

    前置通知:在切入点方法执行之前执行

    后置通知:在切入点方法正常执行之后执行

    异常通知:在切入点方法执行产生异常之后执行

    最终通知:无论切入点方法是否正常执行都会在最后执行

    环绕通知:由spring框架为提供的一种可以在代码中手动控制增强方法何时执行的方式。

    注意:环绕通知如无明确的切入点方法调用,则不会执行其它通知方法。

    Spring框架提供了一个ProceedingJoinPoint接口,该接口有一个方法proceed(),此方法就相当于明确调用切入点方法。该接口可以作为环绕通知的方法参数,在程序执行时,spring框架会提供该接口的实现类供我们使用。

     

    配置切入点表达式id属性用于指定表达式的唯一标识,expression用于指定表达式内容。

    此标签写在aopaspect标签内部只能当前切面使用。写在aopaspect标签外面(必须在</aop:config>标签里面)就变成所有切面可用

    例如: <aop:pointcut id="pt1" expression="execution(* com.service.impl.*.*(..))"/>

    通过标签属性pointcut-ref调用唯一id完成配置。

    切入点表达式写法:

          关键字:execution(表达式)

          表达式:

               访问修饰符   返回值   包名.包名.包名...类名.方法名(参数列表)

          标准的表达式写法:

               public void com.service.impl.AccountServiceImpl.saveAccount()

               访问修饰符(public)可以省略

                   void com.service.impl.AccountServiceImpl.saveAccount()

               返回值可以使用通配符*,表示任意返回值

                   * com.service.impl.AccountServiceImpl.saveAccount()

                包名可以使用通配符*表示任意包。但是有几个包就写几个*

                   * *.*.*.AccountServiceImpl.saveAccount()

                包名可以使用..表示当前包及其子包

                    * *..AccountServiceImpl.saveAccount()

                类名和方法名都可以使用*来完成通配

                        * *..*.*()

                参数列表

                        可以直接写数据类型:

                            基本类型直接写名称   int

                            引用类型写包名.类名的方式   java.lang.String

                        可以使用*表示可以有任意类型的参数(必须有参数)

                        可以使用..表示有无参数均可,有参数可以是任意类型

               全通配写法:

                         * *..*.*(..)

            实际开发中切入点表达式的通常写法:

                  切到业务层实现类下的所有方法

                        * com.service.impl.*.*(..)

    二、注解方式配置:

      1bean.xml文件添加上context支持:xmlns:context="http://www.springframework.org/schema/context"

      2、配置spring创建容器时要扫描的包:<context:component-scan base-package="com"></context:component-scan>

      3、配置spring开启注解AOP的支持:<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

      4、业务层实现类添加配置:@Service("accountService")

      5、通知类配置:@Component("logger")

      整体通知类配置如下:

      

      

  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/huangbf/p/13530526.html
Copyright © 2011-2022 走看看