千家信息网

Spring中如何实现AOP

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇"Spring中如何实现AOP"除了程序员外大部分人都不太理解,今天小编为了让大家更加理解"Spring中如何实现AOP",给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,
千家信息网最后更新 2026年10月31日Spring中如何实现AOP

这篇"Spring中如何实现AOP"除了程序员外大部分人都不太理解,今天小编为了让大家更加理解"Spring中如何实现AOP",给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们一起来看看具体内容吧。

    1、xml 的方式实现 AOP

    ①、接口 UserService

    package com.ys.aop;public interface UserService {    //添加 user    public void addUser();    //删除 user    public void deleteUser();}

    ②、实现类 UserServiceImpl

    package com.ys.aop;public class UserServiceImpl implements UserService{    @Override    public void addUser() {        System.out.println("增加 User");    }    @Override    public void deleteUser() {        System.out.println("删除 User");    }}

    ③、切面类,也就是通知类 MyAspect

    package com.ys.aop;import org.aspectj.lang.JoinPoint;public class MyAspect {    /**     * JoinPoint 能获取目标方法的一些基本信息     * @param joinPoint     */    public void myBefore(JoinPoint joinPoint){        System.out.println("前置通知 : " + joinPoint.getSignature().getName());    }    public void myAfterReturning(JoinPoint joinPoint,Object ret){        System.out.println("后置通知 : " + joinPoint.getSignature().getName() + " , -->" + ret);    }    public void myAfterThrowing(JoinPoint joinPoint,Throwable e){        System.out.println("抛出异常通知 : " + e.getMessage());    }    public void myAfter(){        System.out.println("最终通知");    }}

    ④、AOP配置文件 applicationContext.xml

                                                                                                                               

    ⑤、测试

    @Testpublic void testAop(){    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");    UserService useService = (UserService) context.getBean("userService");    useService.addUser();    useService.deleteUser();}

    ⑥、控制台打印结果

    上面的例子很简单,就是在 UserService 的 addUser()方法和 deleteUser()方法增加前置通知和后置通知,这在实际操作中很好理解。比如这是和数据库打交道的话,那么我们在addUser() 或者deleteUser() 时,必须要在前面开始事务,操作完毕后提交事务。下面我们就用注解的方式来配置。

    2、注解实现 AOP

    ①、导入相应的 jar 包,以及在 applicationContext.xml 文件中导入相应的命名空间。

       

    ②、注解配置 bean

    xml配置:
      
    注解配置:

    目标类:  

    切面类:  

    ③、配置扫描注解识别

    这个我们在前面也讲过,上面配置的注解,Spring 如何才能识别这些类上添加了注解呢?我们必须告诉他。

    在applicationContext.xml 文件中添加如下配置:

        

    ④、注解配置 AOP

    一、我们用xml配置过如下:  

    这是告诉 Spring 哪个是切面类。下面我们用注解配置

    我们在切面类上添加 @Aspect 注解,如下:  

    二、如何让 Spring 认识我们所配置的 AOP 注解?
    光有前面的类注解扫描是不够的,这里我们要额外配置 AOP 注解识别。

    我们在 applicationContext.xml 文件中增加如下配置:

    三、注解配置前置通知

    我们先看 xml 配置前置通知如下:

                            

    那么注解的方式如下:  

    四、注解配置后置通知

    xml 配置后置通知:

            

    注意看,后置通知有个 returning="ret" 配置,这是用来获得目标方法的返回值的。

    注解配置如下:  

    五、测试
    @Test    public void testAopAnnotation(){        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext_Annotation.xml");        UserService useService = (UserService) context.getBean("userService");        useService.addUser();        useService.deleteUser();    }
    六、控制台打印结果  

    3、注解改进  

    我们可以看前置通知和后置通知的注解配置:  

    注意看红色框住的部分,很显然这里是重复的,而且如果我们有多个通知方法,那就得在每个方法名都写上该注解,而且如果包名够复杂,也很容易写错。那么怎么办呢?

    解决办法就是声明公共切入点:

    ①、在 切面类 MyAspect.java 中新增一个切入点方法 myPointCut(),然后在这个方法上添加@Pointcut 注解

    ②、那么前置通知和后置通知,我们可以进行如下改写配置:  

    4、总结

    上面我们只进行了前置通知和后置通知的讲解,还有比如最终通知、环绕通知、抛出异常通知等,配置方式都差不多,这里就不进行一一讲解了。然后我们看一下这些通知的注解:

    @Aspect 声明切面,修饰切面类,从而获得 通知。

    通知

    • @Before 前置

    • @AfterReturning 后置

    • @Around 环绕

    • @AfterThrowing 抛出异常

    • @After 最终

    切入点

    • @PointCut ,修饰方法 private void xxx(){} 之后通过"方法名"获得切入点引用

    感谢您的阅读,希望您对"Spring中如何实现AOP"这一关键问题有了一定的理解,具体使用情况还需要大家自己动手实验使用过才能领会,快去试试吧,如果想阅读更多相关知识点的文章,欢迎关注行业资讯频道!

    方法 配置 注解 切入点 参数 目标 切面 表达式 文件 方式 格式 连接点 内容 这是 代理 事务 名称 就是 控制台 空间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网加科技 苏州找大状互联网科技有限公司 互联网和科技创新 互联网 的科技创新 顺玮阁互联网科技 中国互联网金融科技基金 镁科技互联网资讯平台 北京三清互联网科技 剑昆互联网络科技有限公司临桂 南山科技园互联网公司有哪些 互联网科技革命什么开始 花神(南京)互联网科技有限公司 互联网科技产业特征 朱啸虎曾投资哪些互联网科技企业 用友工业互联网科技发展 恒生互联网科技业指数调整周期 互联网第三次科技革命特征 互联网科技职业技能培训学校 保山浩联互联网科技有限公司 广州全民伙伴互联网科技有限公司 与互联网科技公司 齐家互联网科技 上海喔噻互联网科技 互联网金融科技平台 宁波青枫互联网科技有限公司 电子科技大学互联网创业大赛 洛阳共同富裕互联网科技有限公司 互联网科技圈年度人物 上海京穆互联网科技有限公司 互联网科技的前景
    0