Spring 学习——Spring AOP——AOP配置篇Advice(无参数传递)

声明通知Advice

  • 配置方式(以前置通知为例子)

    • 方式一

      <aop:config>        <aop:aspect id="ikAspectAop" ref="ikAspect">                <aop:pointcut id="ikPoint" expression="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:pointcut>                <aop:before method="aspectBefore" pointcut-ref="ikPoint"></aop:before>        </aop:aspect></aop:config>
      • 优点:前置通知、后置通知、环绕通知使用同一个切点时,配置一个<aop:poincut />即可,方便配置。
    • 方式二
      <aop:config>
              <aop:aspect id="ikAspectAop" ref="ikAspect">
                      <aop:before method="aspectBefore" pointcut="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:before>
              </aop:aspect>
      </aop:config>
      • 优点:前置通知、后置通知、环绕通知使用不同切点时,不需要配置<aop:poincut />元素,可以直接在<aop:before />元素内配置切点。
    • Next

       
  • 前置通知(Before Advice)
    • 在切入点时机事务执行之前,执行通知
    • 方式一
       <aop:config>
           <aop:aspect id="ikAspectAop" ref="ikAspect">
                <aop:pointcut id="ikPoint" expression="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:pointcut>
                <aop:before method="aspectBefore" pointcut-ref="ikPoint"></aop:before>
           </aop:aspect>
       </aop:config>
    • 方式二
       <aop:config>
            <aop:aspect id="ikAspectAop" ref="ikAspect">
                 <aop:before method="aspectBefore" pointcut="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:before>
            </aop:aspect>
       </aop:config>
    • Next
  • 后置通知(After Running Advice)
    • 在切入点时机事务执行之后,执行通知(前提:切入点执行时没有异常,否则不会执行)
    • 方式一
      <aop:config>
           <aop:aspect id="ikAspectAop" ref="ikAspect">
                <aop:pointcut id="ikPoint" expression="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:pointcut>
                <aop:after-returning method="aspectBefore" pointcut-ref="ikPoint"></aop:before>
           </aop:aspect>
       </aop:config>
    • 方式二
      <aop:config>
           <aop:aspect id="ikAspectAop" ref="ikAspect">
                <aop:after-returning method="aspectBefore" pointcut="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:before>
           </aop:aspect>
       </aop:config>
    • Next
  • 抛出异常通知(After Throwing Advice)
    • 若在切入点时机执行时抛出异常,执行通知。(执行异常通知,则不会执行后置通知)
    • 方式一
      <aop:config>
           <aop:aspect id="ikAspectAop" ref="ikAspect">
                <aop:pointcut id="ikPoint" expression="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:pointcut>
                <aop:after-throwing method="aspectBefore" pointcut-ref="ikPoint"></aop:before>
           </aop:aspect>
       </aop:config>
    • 方式二
      <aop:config>
           <aop:aspect id="ikAspectAop" ref="ikAspect">
                <aop:after-throwing method="aspectBefore" pointcut="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:before>
           </aop:aspect>
       </aop:config>
    • Next
  • 后通知(After Ending Advice)
    • 在切入点时机执行之后,执行通知。(切入点执行时,无论正常执行,还是抛出异常,都会执行通知,相当于try_catch_finally)。
    • 方式一
      <aop:config>
           <aop:aspect id="ikAspectAop" ref="ikAspect">
                <aop:pointcut id="ikPoint" expression="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:pointcut>
                <aop:after method="aspectBefore" pointcut-ref="ikPoint"></aop:before>
           </aop:aspect>
       </aop:config>
    • 方式二
      <aop:config>
           <aop:aspect id="ikAspectAop" ref="ikAspect">
                <aop:after method="aspectBefore" pointcut="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:before>
           </aop:aspect>
       </aop:config>
    • Next
    • 无论切面是否出现异常,后通知动作正常执行
  • 环绕通知(Around Advice)
    • 环绕通知在
    • 方式一
      <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd" >
      
              <bean id="ikAspect" class="com.jing.spring.aop.IKAspect"></bean>        <bean id="ikAspectBiz" class="com.jing.spring.aop.IKAspectBiz"></bean>
      
              <aop:config>            <aop:aspect id="ikAspectAop" ref="ikAspect">                <aop:pointcut id="ikPoint" expression="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:pointcut>                <aop:around method="aspectAround" pointcut-ref="ikPoint"></aop:around>            </aop:aspect>        </aop:config>
      
      </beans>
      package com.jing.spring.aop;
      import org.aspectj.lang.ProceedingJoinPoint;
      
      public class IKAspect {
      public void aspectAround(ProceedingJoinPoint pj){
      
              System.out.println("IKAspect.aspectAroud,its 环绕通知前");
              try {
                  Object proceed = pj.proceed();
              } catch (Throwable throwable) {
                  throwable.printStackTrace();
              }
              System.out.println("IKAspect.aspectAroud,its 环绕通知后");
      
          }
      }
    • 方式二
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/aop
              http://www.springframework.org/schema/aop/spring-aop.xsd" >
      
              <bean id="ikAspect" class="com.jing.spring.aop.IKAspect"></bean>
              <bean id="ikAspectBiz" class="com.jing.spring.aop.IKAspectBiz"></bean>
      
              <aop:config>
                  <aop:aspect id="ikAspectAop" ref="ikAspect">
                      <aop:around method="aspectAround" pointcut="execution(* com.jing.spring.aop.IKAspectBiz.*(..))"></aop:around>
                  </aop:aspect>
              </aop:config>
      
      </beans>
      package com.jing.spring.aop;
      import org.aspectj.lang.ProceedingJoinPoint;
      
      public class IKAspect {
      public void aspectAround(ProceedingJoinPoint pj){
      
              System.out.println("IKAspect.aspectAroud,its 环绕通知前");
              try {
                  Object proceed = pj.proceed();
              } catch (Throwable throwable) {
                  throwable.printStackTrace();
              }
              System.out.println("IKAspect.aspectAroud,its 环绕通知后");
      
          }
      }
    • Next

原文地址:https://www.cnblogs.com/jixue/p/10432032.html

时间: 2024-10-12 10:13:29

Spring 学习——Spring AOP——AOP配置篇Advice(无参数传递)的相关文章

20140613_JavaWeb学习之开发环境配置篇

本文所使用软件百度云盘网址:http://pan.baidu.com/s/1kTDRFwz 1安装JDK 操作系统:windows7-64bit 版本:jdk-7u51-windows-x64 安装路径(默认):C:\Program Files\Java\jdk1.7.0_51\ 安装到:C:\Program Files\Java\jre7\ 关闭, 安装完成. 2 配置环境变量 百度经验网址:http://jingyan.baidu.com/article/6dad5075d1dc40a123

Spring学习六、AOP与整合Mybatis

十一.AOP AOP(Aspect Oriented Programming) 意为:面向切面编程 是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的一种延续,是软件开发的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型. 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率. AOP的作用及优势 作用 程序运行期间,不修改源码对已有方法进行增强 优势 减少重复代码

[原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Spring Boot 探索系列 - 自动化配置篇

26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging,Log4J, Log4J2 an

[原创]java WEB学习笔记109:Spring学习---spring中事物管理

博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ------------------------------------------------------------------------------------------------------------------

spring 学习之二 AOP编程

AOP概念 AOP, aspect oriented programing,翻译过来就是面向切面编程的意思,那什么叫面向切面编程呢?相对于之前传统的纵向继承方式来对原有功能进行功能扩展, 面向切面编程的好处就是不需要增加源代码就可以进行功能扩展. AOP术语 --joinpint(连接点): 指那些被拦截到的点,在spring中,这些点指的是方法 --pointcut(切入点) : 指要对哪些连接点进行拦截定义,即对哪些方法做扩展处理 --advice(通知/增强) : 通知是指拦截到joinp

spring学习 十三 注解AOP

spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解,也就是要开启注解扫描,注解的包是spring-context.jar,所以在配置文件中还要引入context约束,也就是引入 xmlns:context命名空间 第一步开始注解,base-package的属性值指定哪些包下可能有注解,多个包用逗号隔开,也可以采用通配符进行配置 <!-- 开启注解 --> <context:component-scan base-package="com.airp

Spring学习2_AOP通过XML配置简单实现

Spring在实际运用中可通过注解或者XML配置来实现AOP功能,这里在上一篇的基础上通过Demo来模拟XML配置实现AOP的过程. 代码结构如下 1.Spring配置如下,在<aop:config>中配置好对应的切点pointCut, 然后在切面aspect中引用对应的切点即可. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springfra

[原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------