下图为项目的目录结构, 主要是需要一个切面类、一个目标类和一个配置XML文件。其原理大概为,切面类对目标的进行通知。 接下来就是代码展示了: XML配置切面的代码为
<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="cus" class="com.nuc.aspect2.impl.CustomerDaoImpl"/> <!-- 配置切面类--> <bean id="myAspectXML" class="com.nuc.aspect2.MyAspectXML"/> <!--aop配置--> <aop:config> <!--切点配置--> <aop:pointcut id="pointcut1" expression="execution(* com.nuc.aspect2.CustomerDao.save(..))"/> <aop:pointcut id="pointcut2" expression="execution(* com.nuc.aspect2.CustomerDao.update(..))"/> <aop:pointcut id="pointcut3" expression="execution(* com.nuc.aspect2.CustomerDao.delete(..))"/> <aop:pointcut id="pointcut4" expression="execution(* com.nuc.aspect2.CustomerDao.find(..))"/> <aop:pointcut id="pointcut5" expression="execution(* com.nuc.aspect2.CustomerDao.findAll(..))"/> <!-- aop的切面--> <aop:aspect ref="myAspectXML"> <!-- 前置增强--> <aop:before method="before" pointcut-ref="pointcut1"/> <aop:after-returning method="afterReturning" pointcut-ref="pointcut2" returning="result"/> <aop:around method="around" pointcut-ref="pointcut3"/> <aop:after-throwing method="afterThrowable" pointcut-ref="pointcut4"/> <aop:after method="after" pointcut-ref="pointcut5"/> </aop:aspect> </aop:config> </beans> **目标类代码为** /** 接口与其实现类 **/ public interface CustomerDao { public void save(); public void find(); public String update(); public void delete(); public void findAll(); } //实现类 public class CustomerDaoImpl implements CustomerDao { public void save() { System.out.println("保存。。。。"); } public void find() { System.out.println("查找。。。。"); //int i = 1/0; } public String update() { System.out.println("更新。。。。"); return "Hello"; } public void delete() { System.out.println("删除。。。。"); } public void findAll(){ System.out.println("查询全部"); } } **切面类** public class MyAspectXML { //前置通知 public void before(JoinPoint joinPoint){ System.out.println("前置通知_-_-_-_-_-_-_-_-_-_-_-_"+joinPoint); } public void afterReturning(Object result){ System.out.println("后置增强_-_-_-_-_-_-_-_-_-_-_-"+result); } public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("XML环绕前通知"); Object obj = proceedingJoinPoint.proceed(); System.out.println("XML环绕前通知"); return obj; } public void afterThrowable(){ System.out.println("异常抛出通知_-_-_-_-_-_-_-_-_-"); } public void after(){ System.out.println("最终通知_-_-_-_-_-_-_-_-_-"); }