Spring的AOP开发入门,Spring整合Junit单元测试(基于ASpectJ的XML方式)

参考自 https://www.cnblogs.com/ltfxy/p/9882430.html

创建web项目,引入jar包

除了基本的6个Spring开发的jar包外,还要引入aop开发相关的四个jar包:

附jar包链接:链接:https://pan.baidu.com/s/1E_8NA-DcWwt9hdK-czkm9A   提取码:xq8n

除此之外,Spring要整合Junit单元测试的话,还需引入

引入Spring配置文件

  引入aop开发的约束

<?xml version="1.0" encoding="UTF-8"?>
<!-- ===============================引入aop开发的约束============================ -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>

编写目标类与实现类,并完成配置

package spring.day2_aop;

public interface ProductDao {
    public void find();
    public void save();
    public void delete();
    public void update();
}
View Code
package spring.day2_aop;

public class ProductDaoImp implements ProductDao {

    @Override
    public void find() {
        System.out.println("查询商品。。。");
    }

    @Override
    public void save() {
        System.out.println("保存商品。。。");

    }

    @Override
    public void delete() {
        System.out.println("删除商品。。。");

    }

    @Override
    public void update() {
        System.out.println("修改商品。。。");

    }

}
View Code

编写测试类

package spring.day2_aop;

import javax.annotation.Resource;

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

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext4.xml")
public class SpringDemo1 {
    
    @Resource(name="productDao")
    private ProductDao productDao;
    @Test
    public void demo1() {
        productDao.save();
        productDao.delete();
        productDao.update();
        productDao.find();
    }
}

运行结果如下:

编写一个切面类并通过aop配置产生代理

package spring.day2_aop;
/*
 * 切面类:放入通知的方法即增强的那些方法
 */
public class MyAspectXml {
    /*
     * 权限校验的方法
     */
    public void checkPri() {
        System.out.println("权限校验..............");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===============================引入aop开发的约束============================ -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 配置目标对象:被增强的对象 -->
    <bean id="productDao" class="spring.day2_aop.ProductDaoImp"></bean>

    <!-- 将切面类交给spring管理 -->
    <bean id="myAspect" class="spring.day2_aop.MyAspectXml"></bean>

    <!-- 通过aop的配置来对目标类产生代理 -->
    <aop:config>
        <!-- 配置切入点,表达式(execution函数)配置当前web项目下哪些类的哪些方法需要增强,*代表任意返回值,..代表任意参数 -->
        <aop:pointcut
            expression="execution(* spring.day2_aop.ProductDaoImp.save(..))"
            id="pointcut1" />
        <!-- 配置切面 -->
        <aop:aspect ref="myAspect">
            <!-- 配置为前置增强 -->
            <aop:before method="checkPri" pointcut-ref="pointcut1" />
        </aop:aspect>
    </aop:config>
</beans>

测试运行

补充:

@Runwith() :用于指定junit运行环境。它是junit提供给其他框架测试用的。这个注解是指定测试的时候使用的执行类,不写的话会使用默认的执行类

@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境

@ContextConfiguration :Spring整合JUnit4测试时,使用注解引入多个配置文件

单个文件时:

@ContextConfiguration(Locations="classpath:applicationContext.xml") 

多个文件时:可用{}

@ContextConfiguration(Locations = { "classpath:spring1.xml", "classpath:spring2.xml" })

 

猜你喜欢

转载自www.cnblogs.com/zengcongcong/p/10360248.html
今日推荐