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

时间:2023-05-16 21:29:56

参考自 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的AOP开发入门,Spring整合Junit单元测试(基于ASpectJ的XML方式)

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

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

引入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();
}
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("修改商品。。。"); } }

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

编写测试类

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();
}
}

运行结果如下:

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

编写一个切面类并通过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>

测试运行

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

补充:

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

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

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

单个文件时:

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

多个文件时:可用{}

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