|
第八周 |
所花时间 |
25h左右 |
代码量 |
2000行左右 |
博客量 |
6篇 |
学到的知识点 |
世界疫情的可视化图表,爬取世界疫情的数据,Spring中的AOP
|
摘要:前两天学习了基于注解配置AOP的方法,今天学习了通过配置文件来配置AOP的方法,两者没有本质的区别,但是通过使用,感觉通过配置文件来配置AOP更好理解,而且使用起来更简易。下面通过简单实例来说明
一、导入所依赖的相关jar包
二、核心部分:在xml文件中配置相关的bean以及AOP

<?xml version="1.0" encoding="UTF-8"?> <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-4.3.xsd"> <!-- 配置bean --> <bean id="yunsuan" class="peizhiwenjianAOP.YunsuanImpl"></bean> <!-- 配置切面的bean --> <bean id="qiemian" class="peizhiwenjianAOP.Qiemian"></bean> <bean id="qiemianyouxianji" class="peizhiwenjianAOP.QiemianYouxianji"></bean> <!-- 配置AOP --> <aop:config> <!-- 配置切点表达式 --> <aop:pointcut expression="execution(* peizhiwenjianAOP.*.*(int,int))" id="pointcut" /> <!-- 配置切面及通知 --> <aop:aspect ref="qiemian" order="2"> <aop:before method="before" pointcut-ref="pointcut" /> <aop:after method="after" pointcut-ref="pointcut" /> <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="e" /> <aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result" /> <!-- <aop:around method="around" pointcut-ref="pointcut"/> --> </aop:aspect> <aop:aspect ref="qiemianyouxianji" order="1"> <aop:before method="youxianji" pointcut-ref="pointcut" /> </aop:aspect> </aop:config> </beans>
三、其他部分代码

package peizhiwenjianAOP; public interface Yunsuan { int add(int i,int j); int sub(int i,int j); int mul(int i,int j); int div(int i,int j); }

package peizhiwenjianAOP; import org.springframework.stereotype.Component; @Component public class YunsuanImpl implements Yunsuan { @Override public int add(int i, int j) { //System.out.println("begin"+i+","+j); int result=i+j; //System.out.println("end"+result); return result; } @Override public int sub(int i, int j) { //System.out.println("begin"+i+","+j); int result=i-j; //System.out.println("end"+result); return result; } @Override public int mul(int i, int j) { //System.out.println("begin"+i+","+j); int result=i*j; //System.out.println("end"+result); return result; } @Override public int div(int i, int j) { //System.out.println("begin"+i+","+j); int result=i/j; //System.out.println("end"+result); return result; } }

package peizhiwenjianAOP; import java.util.Arrays; import java.util.List; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; public class Qiemian { public void before(JoinPoint joinpoint) { String name=joinpoint.getSignature().getName(); List<Object> args=Arrays.asList(joinpoint.getArgs()); System.out.println(name+" begin "+args); } public void after(JoinPoint joinpoint) { String name=joinpoint.getSignature().getName(); //不能返回目标方法执行的结果 //List<Object> args=Arrays.asList(joinpoint.getArgs()); System.out.println(name+" end "); } public void afterReturning(JoinPoint joinpoint,Object result) { String name=joinpoint.getSignature().getName(); System.out.println(name+" end with " + result); } public void afterThrowing(JoinPoint joinpoint,Exception e) { String name=joinpoint.getSignature().getName(); System.out.println(name+" exception " + e); } public Object around(ProceedingJoinPoint pdj) { Object result=null; String name=pdj.getSignature().getName(); //执行目标方法 try { //前置通知 System.out.println(name+" begin with " + Arrays.asList(pdj.getArgs())); result = pdj.proceed(); //后置通知 System.out.println(name+" end with " + Arrays.asList(pdj.getArgs())); } catch (Throwable e) { // TODO 自动生成的 catch 块 //异常通知 System.out.println(name+" exception " + e); throw new RuntimeException(e); } //后置通知 System.out.println(name+" end "); return result; } }

package peizhiwenjianAOP; public class QiemianYouxianji { public void youxianji() { System.out.println("我最快"); } }

package peizhiwenjianAOP; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext c=new ClassPathXmlApplicationContext("peizhiwenjianAOP.xml"); Yunsuan yunsuan=c.getBean(Yunsuan.class); int result=yunsuan.add(3, 0); System.out.println("result="+result); int re=yunsuan.div(3, 0); System.out.println("result="+re); } }