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")

      整体通知类配置如下:

      

      

  • 相关阅读:
    关于读者来信的一些思考
    serializeArray()与serialize()的区别
    懒人代码-顶部栏
    $.ajax()方法详解
    JavaScript(js)对象常用操作,JS操作JSON总结
    js 获取手机浏览器类型,修改css文件的class的值
    阻止在极短的时间重复执行某个函数
    android WebViewClient和WebChromeClient
    java枚举使用详解
    android-async-http
  • 原文地址:https://www.cnblogs.com/huangbf/p/13530526.html
Copyright © 2011-2022 走看看