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

本文介绍了一个使用Spring AOP实现的日志记录和方法调用监控的示例。通过配置applicationContext.xml,定义了两个切面类MyAspect和MyLoggin,分别负责方法执行前后及异常时的日志记录,并对MyCalc类的方法进行增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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. 测试效果







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值