400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Spring面向切面编程AOP实现详解

简介

十年的开化网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整开化建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“开化网站设计”,“开化网站推广”以来,每个客户项目都认真落实执行。

1、什么叫做面向切面编程?

Spring 面向切面编程AOP实现详解

Spring 面向切面编程AOP实现详解

概念:把一个个的横切关注点(某种业务的实现代码)放到某个模块中去,称之为切面。每个切面影响业务的一种功能,切面的目的就是为了功能增强,将需要增强的方法做成切面,实现对业务的增强,就是面向切面编程。

目的:将与业务本身无关,却被业务模块所共同调用的功能代码封装成切面,以减少系统的重复代码,降低耦合,提高可扩展性。

优势:把多个方法前/后的共同代码抽离出来,使用动态代理机制来控制,先执行抽离出来的代码,再执行每一个真实方法.

2、Spring中的AOP使用动态代理来实现:

3、AOP的一些基本概念

切入点语法

1、execution(<访问修饰符>?<返回值类型><声明类型>?<方法名>(<参数名>)<异常名>)

?表示出现0次或1次

通配符:

* :匹配任何部分,只能表示一个单词

 .. : 可用于全限定名中和方法参数中,分别表示子包和0到N个参数

2、实例介绍:

Spring 面向切面编程AOP实现详解

XML方式实现AOP

1、导入依赖

spring-aop  spring-aspectj

2、命名空间

<?xml version="1.0" encoding="UTF-8"?>

3、配置AOP


  
    
    
    
    
      
      
      
      
      
      
      
      
    
  

4、AOP中几个不同的增强时机:

环绕增强可以在方法调用前后完成自定义的行为,环绕增强有两个要求

1、方法要返回一个Object(返回的结果)

2、方法的第一个参数是ProceedingJoinPoint(可以继续向下传递的切入点)


5、代码示例

public class TxManager {
  public void begin() {
    System.out.println("开启事务###");
  }
  public void commit() {
    System.out.println("提交事务++++++");
  }
  public void rollback() {
    System.out.println("回滚事务....");
  }
  public void destroy() {
    System.out.println("释放资源……………………");
  }
  //环绕增强代码示例
  public Object around(ProceedingJoinPoint pjp){
    Object obj=null;
    try {
      System.out.println("开启事务###");
      obj=pjp.proceed();
      System.out.println("提交事务++++++");
    } catch (Throwable throwable) {
      throwable.printStackTrace();
      System.out.println("回滚事务....");
    }finally {
      System.out.println("释放资源……………………");
    }
    return obj;
  }
}

6、获取增强的参数

1.在增强方法中获取异常的信息。

的标签中添加throwing=“ex”的属性

增强方法rollback中,添加形式参数:Exception ex。

则形参ex中就自动注入了异常对象。 注意:throwing属性的值,必须与方法中形参的名字相同

2.在增强方法中,获取被增强方法的信息

Spring AOP提供org.aspectj.lang.JoinPoint类作为增强方法的第一个参数。

JoinPoint :提供访问当前被增强方法的真实对象、代理对象、方法参数等数据。

ProceedingJoinPoint:JinPoint子类,只用于环绕增强中,可以处理被增强方法。

注解方式实现AOP

1、命名空间

2、添加注解解析器

3、@Aspect 切面,下面的注解都在切面里配置

4、代码示例

@Aspect
public class TxManager {
  @Pointcut("execution( * com.test.class04_AOP_Anno.service.IUserService.*(..))")
  public void tt(){}
  @Before("tt()")
  public void begin() {
    System.out.println("开启事务###");
  }
  @AfterReturning("tt()")
  public void commit() {
    System.out.println("提交事务++++++");
  }
  @AfterThrowing(value="tt()",throwing = "ex")
  public void rollback() {
    System.out.println("回滚事务....");
  }
  @After("tt()")
  public void destroy() {
    System.out.println("释放资源……………………");
  }
  @Around("tt()")
  public Object around(ProceedingJoinPoint pjp){
    Object obj=null;
    try {
      System.out.println("开启事务###");
      obj=pjp.proceed();
      System.out.println("提交事务++++++");
    } catch (Throwable throwable) {
      throwable.printStackTrace();
      System.out.println("回滚事务....");
    }finally {
      System.out.println("释放资源……………………");
    }
    return obj;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。


新闻名称:Spring面向切面编程AOP实现详解
转载源于:http://mbwzsj.com/article/ipsjsh.html

其他资讯

让你的专属顾问为你服务