Spring3.0中的AOP配置方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring3.0中的AOP配置方法相关的知识,希望对你有一定的参考价值。

参考技术A

   第一种配置方法 使用@AspectJ标签

  在配置文件中添加注解

  创建一个Java文件 使用@Aspect注解修饰该类

  创建一个方法 使用@Before @After @Around等进行修饰 在注解中写上切入点的表达式

  说明 上述Java文件创建好后 需要将其在Spring的容器中进行声明 可以在配置文件中定义节点 也可以使用@Component组件进行修饰

  示例

  Java代码

  import aspectj lang ProceedingJoinPoint;

  import aspectj lang annotation After;

  import aspectj lang annotation AfterThrowing;

  import aspectj lang annotation Around;

  import aspectj lang annotation Aspect;

  import aspectj lang annotation Before;

  import springframework stereotype Component;

  /**

  * 基于注解的AOP日志示例

  * @author ZYWANG

  */

  @Component

  @Aspect

  public class AopLog

  //方法执行前调用

  @Before( execution (* zywang services impl * *( )) )

  public void before()

  System out println( before );

  

  //方法执行后调用

  @After( execution (* zywang services impl * *( )) )

  public void after()

  System out println( after );

  

  //方法执行的前后调用

  @Around( execution (* zywang services impl * *( )) )

  public Object around(ProceedingJoinPoint point) throws Throwable

  System out println( begin around );

  Object object = point proceed();

  System out println( end around );

  return object;

  

  //方法运行出现异常时调用

  @AfterThrowing(pointcut = execution (* zywang services impl * *( )) throwing = ex )

  public void afterThrowing(Exception ex)

  System out println( afterThrowing );

  System out println(ex);

  

  

  上面这段代码中多次使用了重复的切入点 这种情况下 可以使用@Pointcut标注 来修改一个切入点方法(这个方法不需要参数和方法体) 然后就可以在@Before等标注中引用该方法作为切入点 示例如下

  Java代码

  import aspectj lang ProceedingJoinPoint;

  import aspectj lang annotation Around;

  import aspectj lang annotation Aspect;

  import aspectj lang annotation Before;

  import aspectj lang annotation Pointcut;

  import springframework stereotype Component;

  /**

  * 基于注解的AOP日志示例

  * @author ZYWANG

  */

  @Component

  @Aspect

  public class AopLog

  @Pointcut( execution (* iflysse school services impl * *( )) )

  public void pointcut()

  //方法执行前调用

  @Before( pointcut() )

  public void before()

  System out println( before );

  

  //方法执行的前后调用

  @Around( pointcut() )

  public Object around(ProceedingJoinPoint point) throws Throwable

  System out println( begin around );

  Object object = point proceed();

  System out println( end around );

  return object;

  

  

   第二种配置方法 基于配置文件的配置

  创建一个Java文件 并指定一个用于执行拦截的方法 该方法可以有 个或多个参数

  在Spring配置文件中注册该Java类为一个Bean

  使用 等标签进行配置

  示例

  Java文件

  Java代码

  import aspectj lang ProceedingJoinPoint;

  /**

  * 基于配置文件的AOP日志示例

  * @author ZYWANG

  */

  public class AopLog

  //方法执行的前后调用

  public Object runOnAround(ProceedingJoinPoint point) throws Throwable

  System out println( begin around );

  Object object = point proceed();

  System out println( end around );

  return object;

  

  

  Spring配置文件

  Xml代码

  注意 上面这个示例使用的是around方式的拦截 该方法要求Java类中的方法有一个ProceedingJoinPoint类型的参数

lishixinzhi/Article/program/Java/ky/201311/28907

以上是关于Spring3.0中的AOP配置方法的主要内容,如果未能解决你的问题,请参考以下文章

8 -- 深入使用Spring -- 0...

Spring之AOP在XML中的配置方法

Spring AOP 配置通知方法的时候如何处理方法重载

Spring AOP获取拦截方法的参数名称跟参数值

spring3.0定时器 xml配置和注解方式

spring实现aop具体步骤