博客
关于我
Spring Advice
阅读量:839 次
发布时间: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/

    你可能感兴趣的文章
    Oracle GoldenGate Director安装和配置(无图)
    查看>>
    oracle script
    查看>>
    Oracle SOA Suit Adapter
    查看>>
    Oracle Spatial空间数据库建立
    查看>>
    UML— 活动图
    查看>>
    Oracle 写存储过程的一个模板还有一些基本的知识点
    查看>>
    oracle 创建字段自增长——两种实现方式汇总
    查看>>
    Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
    查看>>
    oracle 可传输的表空间:rman
    查看>>
    oracle 学习
    查看>>
    ORACLE 客户端工具连接oracle 12504
    查看>>
    oracle 行转列
    查看>>
    Oracle 递归
    查看>>
    oracle--用户,权限,角色的管理
    查看>>
    Oracle10g EM乱码之快速解决
    查看>>
    Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
    查看>>
    Oracle11G基本操作
    查看>>
    Oracle11g服务详细介绍及哪些服务是必须开启的?
    查看>>
    Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
    查看>>
    oracle12安装软件后安装数据库,然后需要自己配置监听
    查看>>