您的位置:首页 > 编程语言 > Java开发

Spring关于AOP配置举例(XML配置文件方式)

2018-01-24 09:40 696 查看
1. 案例结构



2. 配置文件applicationContext.xml

<?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:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd ">
<!--扫描MyAspect -->
<context:component-scan base-package="com.zhq.aspect"/>
<!--配置一个MyCalc -->
<bean class="com.zhq.aspect.MyCalc"/>
<!-- 配置切面类 -->
<bean id="myAspect" class="com.zhq.aspect.MyAspect"/>
<bean id="myLoggin" class="com.zhq.aspect.MyLoggin"/>
<!--切面配置  -->
<aop:config>
<!--切点表达式  -->
<aop:pointcut expression="execution(* com.zhq.aspect.MyCalc.*(..))" id="cut"/>
<!--配置切入点通知  -->
<aop:aspect ref="myAspect" order="2">
<aop:before method="beFore" pointcut-ref="cut"/>
<aop:after method="beAfter" pointcut-ref="cut"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="cut"/>
<aop:after-returning method="afterReturning" pointcut-ref="cut" returning="r"/>
</aop:aspect>
<aop:aspect ref="myLoggin" order="1">
<aop:before method="beginLoggin" pointcut-ref="cut"/>
</aop:aspect>
</aop:config>
</beans>

2. 其他类

package com.zhq.aspect;

import java.util.Arrays;

import org.aspectj.lang.JoinPoint;
/**
* 切面类,存放切面
* */
public class MyAspect {
//通告,用于织入到某个指定的切入点。@Before表示此切面是一个前置通知,它会在方法执行前执行。
public void beFore(JoinPoint jp) {
//取所有参数
Object args[]=jp.getArgs();
//获取方法名
String name=jp.getSignature().getName();
System.out.println(name+"方法准备执行...");
System.out.println("输入参数:"+Arrays.toString(args));
}
public void beAfter() {
System.out.println("方法执行结束。");
}
//返回通知
public void afterReturning(JoinPoint jp,Object r) {
//获取方法名
String name=jp.getSignature().getName();
System.out.println(name+"开始返回结果...");
System.out.println("结果是:"+r);
}
//异常通知
public void afterThrowing(JoinPoint jp) {
//获取方法名
String name=jp.getSignature().getName();
System.out.println(name+"出现异常...");
}
}

package com.zhq.aspect;

public class MyCalc {
//连接点,织入点
public int add(int a,int b) {
return a+b;
}
public int div(int a,int b) {
return a-b;
}
public int chu(int a,int b) {
return a/b;
}
}

package com.zhq.aspect;

/**
* 切面类,存放切面
* */
public class MyLoggin {
public void beginLoggin() {
System.out.println("开始日志....");
}

}

package com.zhq.aspect;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] args) {
ApplicationContext cxt=new ClassPathXmlApplicationContext("config/applicationContext.xml");
MyCalc ca=(MyCalc) cxt.getBean(MyCalc.class);
//普通测试
System.out.println(ca.add(10, 20));
System.out.println(ca.div(10, 20));
//异常测试
/*System.out.println(ca.chu(10,0));*/

}

}

3. 测试效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring AOP XML配置