Spring-AOP通知类型xml版举例

xml版
Spring中通知的类型

  • 前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
  • 正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
  • 异常返回通知[After throwing advice]:在连接点抛出异常后执行。
  • 返回通知[After (finally)advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
  • 环绕通知[Around
    advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join
    point(调用ProceedingJoinPoint的proceed方法)还是中断执行。

针对以上举个例子(xml版):
接口:

package com.it.spring.aop4.dao;

public interface IProductDAO {
    void addProduct();
    void delProduct();
    void queryProduct();
    void updateProduct() ;
    String queryPro();
    void delProduct2();
    void findProduct();
}

实现类:

package com.it.spring.aop4.dao;

import org.springframework.stereotype.Repository;

@Repository("productDAO")
public class ProductDAOImpl implements IProductDAO {
    @Override
    public void addProduct() {
        System.out.println("--------ProductDAOImpl add---------");
    }

    @Override
    public void delProduct() {

        System.out.println("-----delProduct()--------");
    }

    @Override
    public void queryProduct() {
        System.out.println("-----queryProduct()--------");

    }

    @Override
    public void updateProduct() {
        System.out.println("----updateProduct()--------");

    }

    @Override
    public String queryPro() {

        System.out.println("----queryPro()--------");

        return "springAOP";
    }

    @Override
    public void delProduct2() {
        System.out.println("---delProduct2()-----");

    }

    @Override
    public void findProduct() {
        System.out.println(12/2);
        System.out.println("------findProduct()--------");
    }
}

增强类:

package com.it.spring.aop4.dao;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 把增强写入到类中 让spring管理
 * 日志管理,性能监控,权限管理,事物管理
 */
 
public class MyAspectXML {
    /**
     * 前置通知获取通知信息
     */
    public void checkPri(JoinPoint joinPoint)
    {

        System.out.println("========权限校验-----------"+joinPoint);
    }

    /**
     * update
     * 后置通知
     */
    public void writelog(JoinPoint joinPoint){

        System.out.println("---------写入日志------------"+joinPoint);
    }

    /**
     * 后置通知获取返回值
     * @param rs
     */
    public void writelog2(Object rs){

        System.out.println("---------写入日志2------------"+rs);
    }

    /**
     * 环绕通知
     * @param joinPoint
     */
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("---======前==========");
        Object obj = joinPoint.proceed();
        System.out.println("---======后==========");
        return obj;
    }

    public void checkUser(Throwable throwable){

        System.out.println("---------校验用户 异常-----------"+throwable.getMessage());
    }

    /**
     * 最终通知
     */
    public void after(){

        System.out.println("--------最终通知总会被执行---------");
    }
}

测试类:

package com.it.spring.aop4.dao;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

/**
 * @author     :zyx
 * @date       :Created in 2020/9/23 14:41
 * @description:spring集成JUnit
 * @modified By:
 * @version:     $
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext3.xml")
public class SpringAOPTest {

    @Resource
    IProductDAO productDAO;

    @Test
    public void test1(){

         productDAO.addProduct();
         productDAO.queryPro();
         productDAO.updateProduct();
         productDAO.delProduct2();
        productDAO.findProduct();
    }
}

xml:

package com.it.spring.aop4.dao;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

/**
 * @author     :zyx
 * @date       :Created in 2020/9/23 14:41
 * @description:spring集成JUnit
 * @modified By:
 * @version:     $
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext3.xml")
public class SpringAOPTest {

    @Resource
    IProductDAO productDAO;

    @Test
    public void test1(){

         productDAO.addProduct();
         productDAO.queryPro();
         productDAO.updateProduct();
         productDAO.delProduct2();
        productDAO.findProduct();
    }
}

测试结果:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值