博客
关于我
Spring Advice
阅读量:800 次
发布时间:2023-04-17

本文共 3621 字,大约阅读时间需要 12 分钟。

Spring AOP浅谈深入——从零开始理解Spring的面向方面编程

面向方面编程(AOP)是Spring框架中最为核心的功能之一,它的基本思想是通过在代码的执行过程中插入额外的功能,模块化处理横切关注点。简单来说,Spring AOP就是一个非常强大的拦截器框架,它可以在方法执行前、执行后或执行过程中插入自定义的逻辑。

AOP的四大核心通知类型

在Spring AOP中,最重要的核心是对方法执行过程的不同阶段进行切入,这可以通过定义不同的通知类型(Advice)来实现。具体来说,Spring AOP支持四种主要的通知类型:

  • 前置通知(Before Advice)

    通知(Advice)之前,方法执行前运行。这个阶段的通知可以用来做一些准备工作,比如数据验证、资源释放等。

  • 后置通知(After Returning Advice)

    方法执行后返回一个结果。这个阶段可以用来处理方法执行后的数据处理,比如数据转换、记录日志等。

  • 抛出通知(Throws Advice)

    方法抛出异常后运行。这个阶段可以用来处理异常,比如捕获异常、记录错误日志等。

  • 环绕通知(Around Advice)

    环绕方法执行过程。这个通知可以同时在方法执行前后执行,既可以做前置处理,也可以做后置处理。它是前置和后置通知的综合体现,非常适合需要在方法执行过程中维护一些上下文的场景。

  • Spring AOP的实际应用示例

    为了更好地理解Spring AOP的工作原理,我们可以通过一个实际的例子来体验。下面是一个简单的用户服务类的接口及其实现类:

    public interface UserService {    void addUser();    String eat();}
    public class UserServiceImpl implements UserService {    public void addUser() {        System.out.println("添加用户");    }    public String eat() {        String some = "apple";        System.out.println("eat a little apple");        return some;    }}

    接下来,我们需要为每个通知类型定义对应的增强类:

    public class BeforeAdvice implements MethodBeforeAdvice {    public void before(Method method, Object[] objects, Object o) throws Throwable {        System.out.println("前置增强---------------");    }}
    public class AfterAdvice implements AfterReturningAdvice {    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {        System.out.println("后置增强");    }}
    public class AroundAdvice implements MethodInterceptor {    public Object invoke(MethodInvocation methodInvocation) throws Throwable {        System.out.println("执行方法之前的环绕通知");        Object result = methodInvocation.proceed();        if (result != null) {            result = "小黑";        }        System.out.println("执行方法之后的环绕通知");        return result;    }}

    为了实现对方法执行过程的增强,我们需要配置Spring的ApplicationContext:

    beforeAdvice
    afterAdvice
    aroundAdrice

    测试验证

    接下来,我们可以通过测试来验证各个通知类型的增强是否正常工作。以下是一个简单的测试类:

    public class Test1011 {    @Test    public void yichang() {        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");        UserService service = (UserService) context.getBean("userProxy");        service.addUser();        System.out.println("---------------");        service.eat();    }    @Test    public void around() {        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");        UserService service = (UserService) context.getBean("userProxy");        service.addUser();        System.out.println("---------------");        service.eat();    }    @Test    public void before() {        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");        UserService service = (UserService) context.getBean("userProxy");        service.addUser();        System.out.println("---------------");        service.eat();    }    @Test    public void after() {        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");        UserService service = (UserService) context.getBean("userProxy");        service.addUser();        System.out.println("---------------");        service.eat();    }}

    通过以上配置和测试,我们可以看到Spring AOP的实际操作效果:

  • 前置通知:在方法执行前打印“前置增强---------------”。
  • 环绕通知:在方法执行前打印“执行方法之前的环绕通知”,方法执行后打印“执行方法之后的环绕通知”,并将返回值修改为“小黑”。
  • 后置通知:在方法执行后打印“后置增强”。
  • 通过以上配置和测试,我们可以清晰地看到Spring AOP在实际应用中的强大功能,它为我们的代码增添了丰富的功能,同时保持了代码的简洁性和可维护性。

    转载地址:http://smgfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL-索引的分类(聚簇索引、二级索引、联合索引)
    查看>>
    Mysql-触发器及创建触发器失败原因
    查看>>
    MySQL-连接
    查看>>
    mysql-递归查询(二)
    查看>>
    MySQL5.1安装
    查看>>
    mysql5.5和5.6版本间的坑
    查看>>
    mysql5.5最简安装教程
    查看>>
    mysql5.6 TIME,DATETIME,TIMESTAMP
    查看>>
    mysql5.6.21重置数据库的root密码
    查看>>
    Mysql5.6主从复制-基于binlog
    查看>>
    MySQL5.6忘记root密码(win平台)
    查看>>
    MySQL5.6的Linux安装shell脚本之二进制安装(一)
    查看>>
    MySQL5.6的zip包安装教程
    查看>>
    mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
    查看>>
    Webpack 基本环境搭建
    查看>>
    mysql5.7 安装版 表不能输入汉字解决方案
    查看>>
    MySQL5.7.18主从复制搭建(一主一从)
    查看>>
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>