• 课时7:后置通知、异常通知


    .1)后置通知的实现步骤以及解释

      1.导入相应jar包 前置通知示例已经有了 这里就不做过多的讲解

      2.编写业务类以及编写后置通知类

         2.1 业务类代码如下

    package net.bdqn.hbz.service.impl;
    
    import net.bdqn.hbz.dao.impl.IStudentDaoImpl;
    import net.bdqn.hbz.pojo.Student;
    import net.bdqn.hbz.service.IStudentService;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;
    
    public class IStudentServiceImpl implements IStudentService {
        private IStudentDaoImpl iStudentDao;
    
        public void setiStudentDao(IStudentDaoImpl iStudentDao) {
            this.iStudentDao = iStudentDao;
        }
    
        /**
         *
         * @param student
         */
        @Transactional(readOnly = false,propagation = Propagation.REQUIRED)
        @Override
        public void addStudent(Student student) {
            iStudentDao.addStudent(new Student());
        }
    
        @Override
        public void deleteStudent(Integer no) {
            System.out.println("正在删除学生");
        }
    
    
    }

        2.2 编写后置通知类 需要实现一个接口 AfterReturningAdvice 所有接口都可以参考前置通知的一张图

    package net.bdqn.hbz.aop;
    
    
    import org.springframework.aop.AfterReturningAdvice;
    
    import java.lang.reflect.Method;
    
    /**
     * 前置通知类
     */
    public class After implements AfterReturningAdvice {
        /**
         *
         * @param o 目标的返回值
         * @param method 目标方法
         * @param objects 目标参数列表
         * @param o1 目标对象
         * @throws Throwable
         */
        @Override
        public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
            System.out.println("后置通知:目标对象:"+o1+",目标方法:"+method.getName()+",目标参数个数:"+
                    objects.length+",目标返回值"+o);
        }
    }

      3.将切面和切入点进行一个连接

        3.1 注入这个后置通知类到SpringIOC容器当中

     <bean id="after" class="net.bdqn.hbz.aop.After"></bean>

        3.2 配置切面和切入点关联关系

          3.2.1 配置切入点信息 (目的就是为了找到这个方法) 以及把切面进行关联

        <aop:config>
    <!--        配置切入点信息-->
            <aop:pointcut id="addAfter" expression="execution(public void addStudent(net.bdqn.hbz.pojo.Student))"></aop:pointcut>
    <!--        配置连接-->
            <aop:advisor advice-ref="after" pointcut-ref="addAfter"></aop:advisor>
        </aop:config>

    .2)异常通知

      1.导入相应jar包 前置通知示例已经有了 这里就不做过多的讲解

      2..编写业务类以及编写后置通知类

        2.1 业务类代码如下

    package net.bdqn.hbz.service.impl;
    
    import net.bdqn.hbz.dao.impl.IStudentDaoImpl;
    import net.bdqn.hbz.pojo.Student;
    import net.bdqn.hbz.service.IStudentService;
    import org.springframework.transaction.annotation.Propagation;
    import org.springframework.transaction.annotation.Transactional;
    
    public class IStudentServiceImpl implements IStudentService {
        private IStudentDaoImpl iStudentDao;
    
        public void setiStudentDao(IStudentDaoImpl iStudentDao) {
            this.iStudentDao = iStudentDao;
        }
    
        /**
         *
         * @param student
         */
        @Transactional(readOnly = false,propagation = Propagation.REQUIRED)
        @Override
        public void addStudent(Student student) {
            iStudentDao.addStudent(new Student());
        }
    
        @Override
        public void deleteStudent(Integer no) {
            System.out.println("正在删除学生");
        }
    }

        2.2编写异常通知类

          2.2.1 在实现ThrowsAdvice发现并没有需要我们重写什么方法 但是源码文档中给出提示:

            public void afterThrowing([Method, args, target], ThrowableSubclass);

            2.2.1.1 这个提示的意思就是[Method, args, target]这些参数可有可无 因为只是异常通知 ,有时候并不需要目标信息.

      3.将切面和切入点进行一个连接

        3.1 注入这个异常通知类到SpringIOC容器当中

    <!--    注入异常通知类-->
        <bean id="throw" class="net.bdqn.hbz.aop.Throw"></bean>

        3.2 配置切面和切入点关联关系

    <!--   将addStudent  和  异常通知进行关联-->
        <aop:config>
            <!--        配置切入点信息-->
            <aop:pointcut id="addThrow" expression="execution(public void addStudent(net.bdqn.hbz.pojo.Student))"/>
    <!--        配置连接-->
            <aop:advisor advice-ref="throw" pointcut-ref="addThrow"/>
        </aop:config>
  • 相关阅读:
    有关程序开发中有关验证中常用的正则表达式汇总
    python学习---logging模块
    有关递归函数,返回值的学习
    设计模式之建造者模式、模版方法
    XXL-JOB使用命令行的方式启动python时,日志过多导致阻塞的解决方式
    Spring Boot后端与Angular前端进行timestamp的交互
    设计模式之代理模式
    设计模式之工厂模式
    设计模式之单例模式
    设计模式之反射机制
  • 原文地址:https://www.cnblogs.com/thisHBZ/p/12511672.html
Copyright © 2020-2023  润新知