参考自 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>
编写目标类与实现类,并完成配置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package spring.day2_aop; public interface ProductDao { public void find(); public void save(); public void delete(); public void update(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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("修改商品。。。"); } }
编写测试类
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" })