课时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>
原文地址:https://www.cnblogs.com/thisHBZ/p/12511672.html