0

0

Java Spring之基于注解的AOP怎么配置

PHPz

PHPz

发布时间:2023-05-17 17:37:06

|

1327人浏览过

|

来源于亿速云

转载

    1 环境搭建

    1.1 第一步:准备必要的代码和 jar 包

    • 拷贝上一小节的工程即可。

    1.2 第二步:在配置文件中导入 context 的名称空间

    
    
     
        
        
            
            
            
            
        
     
        
        
            
            
            
            
        
    

    1.3 第三步:把资源使用注解配置

    • 账户的业务层实现类

    @Service("accountService")
    public class AccountServiceImpl implements IAccountService {
     
        @Autowired
        private IAccountDao accountDao;
    }
    • 账户的持久层实现类

    @Repository("accountDao")
    public class AccountDaoImpl implements IAccountDao {
        @Autowired
        private DBAssit dbAssit ;
    }

     1.4 第四步:在配置文件中指定 spring 要扫描的包

    
    

    2 配置步骤

    2.1 第一步:把通知类也使用注解配置

    • 事务控制类

    @Component("txManager")
    public class TransactionManager {
     
        //定义一个 DBAssit
        @Autowired
        private DBAssit dbAssit ;
    }

    2.2 第二步:在通知类上使用@Aspect 注解声明为切面

    • 作用:

      立即学习Java免费学习笔记(深入)”;

      墨鱼aigc
      墨鱼aigc

      一款超好用的Ai写作工具,为用户提供一键生成营销广告、原创文案、写作辅助等文字生成服务。

      下载
      • 把当前类声明为切面类。

    • 事务控制类

    @Component("txManager")
    @Aspect//表明当前类是一个切面类
    public class TransactionManager {
     
        //定义一个 DBAssit
        @Autowired
        private DBAssit dbAssit ;
    }

    2.3 第三步:在增强的方法上使用注解配置通知

    2.3.1 @Before
    • 作用:

      立即学习Java免费学习笔记(深入)”;

      • 把当前方法看成是前置通知。

    • 属性:

      • value:用于指定切入点表达式,还可以指定切入点表达式的引用。

    //开启事务
    @Before("execution(* com.itheima.service.impl.*.*(..))")
    public void beginTransaction() {
     
        try {
            dbAssit.getCurrentConnection().setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    2.3.2 @AfterReturning
    • 作用:

      立即学习Java免费学习笔记(深入)”;

      • 把当前方法看成是后置通知。

    • 属性:

      • value:用于指定切入点表达式,还可以指定切入点表达式的引用

    //提交事务
    @AfterReturning("execution(* com.itheima.service.impl.*.*(..))")
    public void commit() {
     
        try {
            dbAssit.getCurrentConnection().commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    2.3.3 @AfterThrowing
    • 作用:

      立即学习Java免费学习笔记(深入)”;

      • 把当前方法看成是异常通知。

    • 属性:

      • value:用于指定切入点表达式,还可以指定切入点表达式的引用

    //回滚事务
    @AfterThrowing("execution(* com.itheima.service.impl.*.*(..))")
    public void rollback() {
     
        try {
            dbAssit.getCurrentConnection().rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    2.3.4 @After
    • 作用:

      立即学习Java免费学习笔记(深入)”;

      • 把当前方法看成是最终通知。

    • 属性:

      • value:用于指定切入点表达式,还可以指定切入点表达式的引用

    //释放资源
    @After("execution(* com.itheima.service.impl.*.*(..))")
    public void release() {
     
        try {
            dbAssit.releaseConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    2.4 第四步:在 spring 配置文件中开启 spring 对注解 AOP 的支持

    
    

    3 环绕通知注解配置 @Around

    • 作用:

      立即学习Java免费学习笔记(深入)”;

      • 把当前方法看成是环绕通知。

    • 属性:

      • value:用于指定切入点表达式,还可以指定切入点表达式的引用。

    /**
    * 环绕通知
    * @param pjp
    * @return
    */
    @Around("execution(* com.itheima.service.impl.*.*(..))")
    public Object transactionAround(ProceedingJoinPoint pjp) {
     
        //定义返回值
        Object rtValue = null;
     
        try {
        
            //获取方法执行所需的参数
            Object[] args = pjp.getArgs();
        
            //前置通知:开启事务
            beginTransaction();
     
            //执行方法
            rtValue = pjp.proceed(args);
     
            //后置通知:提交事务
            commit();
            }catch(Throwable e) {
     
            //异常通知:回滚事务
            rollback();
            e.printStackTrace();
        }finally {
     
        //最终通知:释放资源
        release();
        }
     
        return rtValue;
    }

    4 切入点表达式注解 @Pointcut

    @Pointcut("execution(* com.itheima.service.impl.*.*(..))")
    private void pt1() {}
     
        /**
        * 引用方式:
        * 环绕通知
        * @param pjp
        * @return
        */
        @Around("pt1()")//注意:千万别忘了写括号
        public Object transactionAround(ProceedingJoinPoint pjp) {
     
        //定义返回值
        Object rtValue = null;
     
        try {
            //获取方法执行所需的参数
            Object[] args = pjp.getArgs();
     
            //前置通知:开启事务
            beginTransaction();
            
            //执行方法
            rtValue = pjp.proceed(args);
     
            //后置通知:提交事务
            commit();
        }catch(Throwable e) {
     
            //异常通知:回滚事务
            rollback();
            e.printStackTrace();
        }finally {
     
            //最终通知:释放资源
            release();
        }
        
        return rtValue;
    }

    5 不使用 XML 的配置方式

    @Configuration
    @ComponentScan(basePackages="com.itheima")
    @EnableAspectJAutoProxy
    public class SpringConfiguration {
     
    }

    相关文章

    java速学教程(入门到精通)
    java速学教程(入门到精通)

    java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    c++ 根号
    c++ 根号

    本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

    17

    2026.01.23

    c++空格相关教程合集
    c++空格相关教程合集

    本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

    22

    2026.01.23

    yy漫画官方登录入口地址合集
    yy漫画官方登录入口地址合集

    本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

    91

    2026.01.23

    漫蛙最新入口地址汇总2026
    漫蛙最新入口地址汇总2026

    本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

    124

    2026.01.23

    C++ 高级模板编程与元编程
    C++ 高级模板编程与元编程

    本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

    14

    2026.01.23

    php远程文件教程合集
    php远程文件教程合集

    本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

    65

    2026.01.22

    PHP后端开发相关内容汇总
    PHP后端开发相关内容汇总

    本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

    59

    2026.01.22

    php会话教程合集
    php会话教程合集

    本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

    61

    2026.01.22

    宝塔PHP8.4相关教程汇总
    宝塔PHP8.4相关教程汇总

    本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

    33

    2026.01.22

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Spring中文手册
    Spring中文手册

    共0课时 | 0人学习

    马士兵spring视频教程
    马士兵spring视频教程

    共25课时 | 9.1万人学习

    Kotlin 教程
    Kotlin 教程

    共23课时 | 2.8万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号